DynamoDB - त्रुटि से निपटने
अनुरोध के असफल प्रसंस्करण पर, डायनेमोडी एक त्रुटि फेंकता है। प्रत्येक त्रुटि में निम्नलिखित घटक होते हैं: HTTP स्थिति कोड, अपवाद नाम और संदेश। त्रुटि प्रबंधन आपके SDK पर टिकी हुई है, जो त्रुटियों या आपके स्वयं के कोड का प्रचार करता है।
कोड और संदेश
अपवाद अलग-अलग HTTP हेडर स्टेटस कोड में आते हैं। 4xx और 5xx अनुरोध मुद्दों और AWS से संबंधित त्रुटियां रखते हैं।
HTTP 4xx श्रेणी में अपवादों का चयन इस प्रकार है -
AccessDeniedException - क्लाइंट अनुरोध पर सही तरीके से हस्ताक्षर करने में विफल रहा।
ConditionalCheckFailedException - झूठी स्थिति का मूल्यांकन किया गया।
IncompleteSignatureException - अनुरोध में अपूर्ण हस्ताक्षर शामिल थे।
HTTP 5xx श्रेणी में अपवाद इस प्रकार हैं -
- आंतरिक सर्वर त्रुटि
- सेवा उप्लब्ध् नहीं है
रिट्रीट और बैकऑफ़ एल्गोरिदम
त्रुटियाँ कई प्रकार के स्रोतों से आती हैं जैसे कि सर्वर, स्विच, लोड बैलेंसर और संरचना और सिस्टम के अन्य टुकड़े। सामान्य समाधानों में साधारण रिट्रीट होते हैं, जो विश्वसनीयता का समर्थन करते हैं। सभी एसडीके में यह तर्क स्वचालित रूप से शामिल है, और आप अपने आवेदन की आवश्यकताओं के अनुरूप रिट्रीट पैरामीटर सेट कर सकते हैं।
For example - जावा रिट्रीट को रोकने के लिए एक अधिकतमErRRry मूल्य प्रदान करता है।
अमेज़न प्रवाह को नियंत्रित करने के लिए रिट्रीट के अलावा एक बैकऑफ़ समाधान का उपयोग करने की सलाह देता है। इसमें रीट्रीट के बीच उत्तरोत्तर वृद्धि की अवधि होती है और अंततः काफी कम समय के बाद रुक जाती है। नोट SDK स्वचालित रिट्रीव करते हैं, लेकिन घातीय बैकऑफ़ नहीं।
निम्नलिखित कार्यक्रम रिट्रीट बैकऑफ का एक उदाहरण है -
public enum Results {
SUCCESS,
NOT_READY,
THROTTLED,
SERVER_ERROR
}
public static void DoAndWaitExample() {
try {
// asynchronous operation.
long token = asyncOperation();
int retries = 0;
boolean retry = false;
do {
long waitTime = Math.min(getWaitTime(retries), MAX_WAIT_INTERVAL);
System.out.print(waitTime + "\n");
// Pause for result
Thread.sleep(waitTime);
// Get result
Results result = getAsyncOperationResult(token);
if (Results.SUCCESS == result) {
retry = false;
} else if (Results.NOT_READY == result) {
retry = true;
} else if (Results.THROTTLED == result) {
retry = true;
} else if (Results.SERVER_ERROR == result) {
retry = true;
} else {
// stop on other error
retry = false;
}
} while (retry && (retries++ < MAX_RETRIES));
}
catch (Exception ex) {
}
}
public static long getWaitTime(int retryCount) {
long waitTime = ((long) Math.pow(3, retryCount) * 100L);
return waitTime;
}