2014-12-01 10 views
7

क्या त्रुटि स्थिति कोड के आधार पर वसंत पुनः प्रयास (https://github.com/spring-projects/spring-retry) में RetryPolicy सेट करना संभव है? जैसे मैं HttpServerErrorException पर HttpStatus.INTERNAL_SERVER_ERROR स्थिति कोड के साथ पुनः प्रयास करना चाहता हूं, जो 503 है। इसलिए इसे अन्य सभी त्रुटि कोडों को अनदेखा करना चाहिए - [500 - 502] और [504 - 511]।क्या HttpStatus स्थिति कोड के आधार पर वसंत-पुनः प्रयास में RetryPolicy सेट करना संभव है?

+0

सीधे नहीं, लेकिन यदि आप सर्वर का आविष्कार कैसे कर रहे हैं, इसके बारे में अधिक संदर्भ प्रदान कर सकते हैं (उदाहरण के लिए, यदि आप स्प्रिंग इंटीग्रेशन आउटबाउंड गेटवे का उपयोग कर रहे हैं या आप सीधे अपने कोड से 'RestTemplate' का उपयोग कर रहे हैं), तो हम शायद एक समाधान का सुझाव देने में सक्षम हो। –

+0

मैंने RestTemplate को बढ़ाया और RetryTemplate के साथ उनके आसपास के कुछ तरीकों को ओवरराइड किया। मैं उपरोक्त github लिंक पर दिए गए एक उदाहरण का पालन कर रहा हूं, जैसा कि ... SimpleRetry नीति नीति = नया SimpleRetryPolicy(); policy.setMaxAttempts (5); policy.setRetryableExceptions (नई कक्षा [] {HttpServerErrorException.class}); स्प्रिंग रेस्ट टेम्पलेट http स्टेटस त्रुटि कोड 500 - 511 के लिए 'HttpServerErrorException.class' रिपोर्ट करता है, लेकिन, मैं 503 और 504 पर पुनः प्रयास करना चाहता हूं। –

+0

अभी के लिए, मैं doWithRetry (RetryContext संदर्भ) में RetryContext से फेंकने खींच रहा हूं और त्रुटि संदेश पढ़ रहा हूं - context.getLastThrowable()। getMessage(), फिर 503 या 504 के लिए खोज रहे हैं। ऐसा करने के लिए एक बेहतर तरीका होना चाहिए, मुझे लगता है। –

उत्तर

5

RestTemplatesetErrorHandler विकल्प और DefaultResponseErrorHandler डिफ़ॉल्ट है।

इसका कोड लगता है:

public void handleError(ClientHttpResponse response) throws IOException { 
    HttpStatus statusCode = getHttpStatusCode(response); 
    switch (statusCode.series()) { 
     case CLIENT_ERROR: 
      throw new HttpClientErrorException(statusCode, response.getStatusText(), 
        response.getHeaders(), getResponseBody(response), getCharset(response)); 
     case SERVER_ERROR: 
      throw new HttpServerErrorException(statusCode, response.getStatusText(), 
        response.getHeaders(), getResponseBody(response), getCharset(response)); 
     default: 
      throw new RestClientException("Unknown status code [" + statusCode + "]"); 
    } 
} 

तो, आप अपने खुद के कार्यान्वयन कि विधि अपने RetryPolicy आसपास वांछित स्थिति कोड को आसान बनाने के लिए प्रदान कर सकते हैं।

संबंधित मुद्दे