स्थिति कोड और त्रुटि प्रबंधन
gRPC स्थिति कोड का प्रभावी उपयोग करना और अपनी सेवाओं में उचित त्रुटि प्रसार तथा प्रबंधन लागू करना सीखें।
स्थिति कोड और त्रुटि प्रबंधन, CoddyKit पर gRPC और उच्च-प्रदर्शन वाले एपीआई का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह gRPC और उच्च-प्रदर्शन वाले एपीआई सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
gRPC त्रुटियों को क्यों संभालें
किसी भी विश्वसनीय ऐप्लिकेशन में त्रुटियाँ अपरिहार्य हैं। हम उन्हें कैसे संभालते हैं, इससे सिस्टम की विश्वसनीयता और उपयोगकर्ता अनुभव बेहतर या खराब हो सकता है।
gRPC का उपयोग करने वाली वितरित प्रणालियों के लिए एकसमान त्रुटि प्रबंधन अत्यंत महत्वपूर्ण है। इससे सेवाएँ समस्याओं को स्पष्ट रूप से बता सकती हैं और क्लाइंट उचित प्रतिक्रिया दे सकते हैं।
gRPC स्थिति कोड से परिचय
gRPC RPC (रिमोट प्रक्रिया कॉल) के परिणाम को बताने के लिए मानकीकृत स्थिति कोड के समूह का उपयोग करता है। ये कोड यह समझने का सार्वभौमिक तरीका देते हैं कि कोई कॉल सफल क्यों हुई या विफल क्यों हुई।
इन्हें HTTP स्थिति कोड जैसा समझें, लेकिन विशेष रूप से gRPC के लिए। कुछ सामान्य कोड हैं:
OK: RPC सफलतापूर्वक पूर्ण हुई।NOT_FOUND: संसाधन नहीं मिला (जैसे, उपयोगकर्ता ID मौजूद नहीं है)।INTERNAL: सर्वर पर अनपेक्षित त्रुटि हुई।UNAUTHENTICATED: अनुरोध में मान्य प्रमाणीकरण क्रेडेंशियल नहीं हैं।
प्रोटोबफ़ सेवा परिभाषा
त्रुटि प्रबंधन देखने से पहले, आइए .proto फ़ाइल में एक सरल सेवा परिभाषित करें। यह हमारे संदेशों और RPC विधियों की संरचना निर्धारित करती है।
हम एक UserService बनाएँगे, जिसमें GetUser विधि UserRequest लेगी और एक User लौटाएगी।
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.coddykit.grpc.error";
option java_outer_classname = "ErrorProto";
package errorhandling;
message UserRequest {
int32 id = 1;
}
message User {
int32 id = 1;
string name = 2;
string email = 3;
}
service UserService {
rpc GetUser (UserRequest) returns (User);
}सर्वर-साइड त्रुटि संकेत
सर्वर पर, जब कोई संचालन विफल होता है, तो आप सामान्य अपवाद नहीं फेंकते। इसके बजाय, आप उपयुक्त कोड और विवरण वाला gRPC Status ऑब्जेक्ट बनाते हैं और फिर उसे StatusRuntimeException में बदलते हैं।
फिर यह अपवाद responseObserver.onError() विधि के माध्यम से क्लाइंट को भेजा जाता है, जिससे क्लाइंट को मानकीकृत gRPC त्रुटि प्राप्त होती है।
सर्वर त्रुटि कार्यान्वयन
इस उदाहरण को चलाकर देखें। यदि आप 1 के अलावा किसी अन्य उपयोगकर्ता ID का अनुरोध करते हैं, तो सर्वर NOT_FOUND त्रुटि के साथ उत्तर देगा।
import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;
import com.coddykit.grpc.error.ErrorProto.User;
import com.coddykit.grpc.error.ErrorProto.UserRequest;
import com.coddykit.grpc.error.UserServiceGrpc;
public class ErrorServer {
private static final int PORT = 50051;
public static void main(String[] args) throws Exception {
Server server = ServerBuilder.forPort(PORT)
.addService(new UserServiceImpl())
.build();
server.start();
System.out.println("Server started on port " + PORT);
server.awaitTermination();
}
static class UserServiceImpl extends UserServiceGrpc.UserServiceImplBase {
@Override
public void getUser(UserRequest request, StreamObserver<User> responseObserver) {
System.out.println("Received GetUser request for ID: " + request.getId());
if (request.getId() == 1) {
User user = User.newBuilder()
.setId(1)
.setName("Alice")
.setEmail("alice@example.com")
.build();
responseObserver.onNext(user);
responseObserver.onCompleted();
} else {
Status status = Status.NOT_FOUND.withDescription("User with ID " + request.getId() + " not found.");
responseObserver.onError(status.asRuntimeException());
}
}
}
}क्लाइंट-पक्ष त्रुटि प्रबंधन
क्लाइंट-पक्ष पर, gRPC त्रुटियाँ सामान्यतः StatusRuntimeException के रूप में प्राप्त होती हैं। इन अपवादों को सुचारु रूप से संभालने के लिए आपको अपनी gRPC कॉल को try-catch ब्लॉक में रखना चाहिए।
catch ब्लॉक के अंदर, आप अपवाद से प्राप्त Status ऑब्जेक्ट की जाँच करके त्रुटि कोड और विवरण जान सकते हैं। इससे आपका क्लाइंट उचित ढंग से प्रतिक्रिया दे सकता है।
क्लाइंट त्रुटि प्रबंधन का प्रदर्शन
पिछले दृश्य से सर्वर शुरू करने के बाद इस क्लाइंट कोड को चलाएँ। देखें कि यह सफल उपयोगकर्ता खोज और 'नहीं मिला' त्रुटि—दोनों को कैसे संभालता है।
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.StatusRuntimeException;
import com.coddykit.grpc.error.ErrorProto.User;
import com.coddykit.grpc.error.ErrorProto.UserRequest;
import com.coddykit.grpc.error.UserServiceGrpc;
public class ErrorClient {
private static final int PORT = 50051;
private static final String HOST = "localhost";
public static void main(String[] args) {
ManagedChannel channel = ManagedChannelBuilder.forAddress(HOST, PORT)
.usePlaintext() // For local testing without TLS
.build();
UserServiceGrpc.UserServiceBlockingStub blockingStub = UserServiceGrpc.newBlockingStub(channel);
// Scenario 1: User found
try {
UserRequest foundRequest = UserRequest.newBuilder().setId(1).build();
User user = blockingStub.getUser(foundRequest);
System.out.println("User found: " + user.getName());
} catch (StatusRuntimeException e) {
System.err.println("Error calling GetUser (found scenario): " + e.getStatus().getCode() + " - " + e.getStatus().getDescription());
}
System.out.println("\n--- Trying to get a non-existent user ---");
// Scenario 2: User not found (expected error)
try {
UserRequest notFoundRequest = UserRequest.newBuilder().setId(99).build();
User user = blockingStub.getUser(notFoundRequest);
System.out.println("User found (unexpected): " + user.getName()); // This line should not be reached
} catch (StatusRuntimeException e) {
System.err.println("Error calling GetUser (not found scenario):");
System.err.println(" Status Code: " + e.getStatus().getCode());
System.err.println(" Description: " + e.getStatus().getDescription());
} finally {
channel.shutdown();
}
}
}प्रभावी त्रुटि प्रसार
त्रुटियों का उचित प्रसार अत्यंत महत्वपूर्ण है। जब कोई gRPC सेवा किसी अन्य आंतरिक सेवा को कॉल करती है और उसे त्रुटि मिलती है, तो आम तौर पर यह करना सबसे अच्छा होता है:
- त्रुटि का लॉग बनाएँ, जिसमें डीबग करने के लिए पर्याप्त विवरण हो।
- त्रुटि का रूपांतरण करें और उसे कॉल करने वाले क्लाइंट के लिए उपयुक्त gRPC
Statusकोड में बदलें। आंतरिक सिस्टम की त्रुटियों को सीधे उजागर न करें। - त्रुटियों को दबाने से बचें। उन्हें हमेशा संभालें या फिर से उत्पन्न करें, ताकि वे चुपचाप गायब न हो जाएँ।
अपना ज्ञान जाँचें
आप एक ऐसी gRPC सेवा बना रहे हैं जो जटिल गणना करती है। यदि इनपुट डेटा अमान्य है (जैसे, जहाँ केवल धनात्मक संख्याएँ स्वीकार्य हों वहाँ ऋणात्मक संख्याएँ दी गई हों), तो लौटाने के लिए सबसे उपयुक्त gRPC Status कोड कौन-सा होगा?
मुख्य बातें
आपने gRPC त्रुटि प्रबंधन की मूल बातें सीख ली हैं!
- gRPC, RPC के परिणामों के बारे में बताने के लिए मानकीकृत Status Codes का उपयोग करता है।
- सर्वर
Statusऑब्जेक्ट बनाकर औरresponseObserver.onError()को कॉल करके त्रुटियों का संकेत देते हैं। - क्लाइंट
StatusRuntimeExceptionको पकड़कर और उसकेStatusऑब्जेक्ट की जाँच करके त्रुटियों को संभालते हैं। - त्रुटियों का हमेशा स्पष्ट रूप से प्रसार करें और क्लाइंट के लिए उनका उचित रूपांतरण करें।
यह संरचित तरीका आपके वितरित सिस्टम में विश्वसनीय संचार सुनिश्चित करता है।
एआई शिक्षक के साथ gRPC और उच्च-प्रदर्शन वाले एपीआई सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 48
अक्सर पूछे जाने वाले प्रश्न
क्या “स्थिति कोड और त्रुटि प्रबंधन” पाठ निःशुल्क है?
हाँ—“स्थिति कोड और त्रुटि प्रबंधन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“स्थिति कोड और त्रुटि प्रबंधन” में मैं क्या सीखूँगा?
gRPC स्थिति कोड का प्रभावी उपयोग करना और अपनी सेवाओं में उचित त्रुटि प्रसार तथा प्रबंधन लागू करना सीखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ gRPC और उच्च-प्रदर्शन वाले एपीआई का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या gRPC और उच्च-प्रदर्शन वाले एपीआई शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर gRPC और उच्च-प्रदर्शन वाले एपीआई शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“स्थिति कोड और त्रुटि प्रबंधन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- स्थिति कोड और त्रुटि प्रबंधन
- कस्टम मेटाडेटा का प्रसारण
- कॉन्टेक्स्ट और समय-सीमाएँ
- google.rpc.Status के साथ समृद्ध त्रुटि मॉडल