Реализация Retry с использованием Spring retryTemplate не повторяет для выданных исключений - PullRequest
0 голосов
/ 06 января 2020

Я изучаю основы шаблона 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]
...