Я изучаю основы шаблона Spring Retry. Я пытаюсь реализовать PO C, где я хочу вызвать REST API, используя Spring restTemplate, который может генерировать Exception 1 или Exception 2 в любой момент времени. Я внедряю Шаблон повтора, чтобы инициировать повтор в каждом случае, максимум до 3-х попыток в каждом случае. Однако я не вижу даже 1 повторной попытки. Вот мой код:
Ниже приведен мой класс обслуживания клиентов с retryTemplate:
@RequestMapping(path ="/getData/{id}", method = RequestMethod.GET)
public Object getEmployee(@PathVariable("id") String id) throws Exception{
return retryTemplate.execute(new RetryCallback<Object, Exception>() {
@Override
public Object doWithRetry(RetryContext arg0) throws Exception{
Object o = restTutorialClient.getEmployeesList(id);
return o;
}
});
Ниже приведен мой класс клиента:
public Object getEmployeesList(String id) throws Exception1, Exception2{
ResponseEntity<Object> response =null;
String URL = "http://localhost:8081/employee/v1/retreiveEmployees";
URL =URL+"/"+id;
response = myRestTemplate.exchange(URL, HttpMethod.GET, HttpEntity.EMPTY, Object.class);
return response;
}
Это вызовет URL http://localhost: 8081 / employee / v1 / retreiveEmployees сопоставлены с другой службой, где я имитирую различные исключения, как показано ниже:
public List<Employee> getEmployeesList(String id) throws Exception1, Exception2{
List<Employee> myList= new ArrayList<Employee>();
if (id.equals("0")) {
return employeeModel.getEmployees();
}
if (id.equals("1")) {
throw new Exception1("Exception1 occured");
}
if (id.equals("2")) {
throw new Exception2();
}
return myList;
}
Я смог вызвать вышеупомянутую службу и я получаю исключение, но повтор не работает. Вместо этого я вижу другой журнал, как показано ниже:
2020-01-06 11:48:35.882 ERROR 13064 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is **org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2020-01-06T19:48:35.775+0000","status":500,"error":"Internal Server Error","message":"Exception 1 occured","path":"/employee/v1/retreiveEmployees/1"}]]** with root cause
**org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : [{"timestamp":"2020-01-06T19:48:35.775+0000","status":500,"error":"Internal Server Error","message":"**Exception1 occured**","path":"/employee/v1/retreiveEmployees/1"}]**
--- removed logs....
com.rest.api.client.tutorials.restClientTutorial.controller.RestClientController$1.doWithRetry(RestClientController.java:36) ~[classes/:na]
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:287) ~[spring-retry-1.2.4.RELEASE.jar:na]
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:164) ~[spring-retry-1.2.4.RELEASE.jar:na]