Тайм-аут SpringBoot RestTemplate при использовании LoadBalanced

#spring-boot #netflix-eureka #netflix-ribbon

#весенняя загрузка #netflix-эврика #netflix-лента

Вопрос:

Я новичок в микросервисах и пробую демонстрационный проект, в котором у меня есть одна клиентская микросервисная служба, взаимодействующая с микрослужбой CRUD. Я использую сервер Eureka для обнаружения. В службе CRUD определены все операции с базой данных, и я использую RestTemplate для вызова служб, определенных в службе CRUD, из микросервиса клиента.

Общий поток выглядит так

Пожалуйста, обратите внимание, что в нем также есть Payment MS, но он еще не полностью разработан.

Когда я использую жестко заданное значение URL-адреса в моем клиенте, MS RestTemplate postForObject и когда @LoadBalanced не используется.

 rest.postForObject("http://localhost:8762/addCustomer", request, Customer.class);
  

Он работает нормально.

Однако, когда я использую @LoadBalanced в файле конфигурации RestTemplate, он выдает следующую ошибку (я узнал, что мне нужно удалить @EnableEurekaClient при использовании @LoadBalanced . Пробовал, не работает.)

«трассировка»: «java.lang.Исключение IllegalStateException: нет доступных экземпляров для localhost n tat org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:119)ntat org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:99)n tat org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:58)n tat org.springframework.http.клиент.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)n tat org.springframework.http.клиент.Перехват clienthttprequest.executeInternal(перехват clienthttprequest.java:77)ntat org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)n tat org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)n tat org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:739)n tat org.springframework.web.client.RestTemplate.execute(RestTemplate.java:674)n tat org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:418) n tat com.ms.customer.controller.CustomerController.AddCustomer(CustomerController.java:31)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(собственный метод)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)n tat java.base/jdk.internal.reflect.Делегирование methodaccessorimpl.invoke(делегирование methodaccessorimpl.java:43)ntat java.base/java.lang.reflect.Метод.invoke(Метод.java:566) n tat org.springframework.web.method.support.Метод InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)n tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)n tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)n tat org.springframework.web.servlet.mvc.method.аннотация.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)n tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) n tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)n tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) n tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) n tat org.springframework.web.servlet.FrameworkServlet.ProcessRequest(FrameworkServlet.java:1006) n tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:652) n tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)n tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)n tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.apache.tomcat.websocket.сервер.WsFilter.doFilter(WsFilter.java:53)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.springframework.web.filter.RequestContextFilter .doFilterInternal(RequestContextFilter.java:100)ntat org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:119)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)ntat org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:119)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)n tat org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:119) n tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.springframework.web.filter.CharacterEncodingFilter .doFilterInternal(CharacterEncodingFilter.java:201)ntat org.springframework.web.filter.OncePerRequestFilter .doFilter(OncePerRequestFilter.java:119)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)n tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)n tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)n tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)ntat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)n tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)ntat org.apache.catalina.valves.Ошибка reportvalve.invoke(ошибка reportvalve.java:92)n tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) n tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)n tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) n tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)n tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)n tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)ntat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)n tat java.base/java.util.concurrent .ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)n tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)ntat java.base/java.lang.Thread.run(Thread.java:834) n»,

Также я стараюсь не жестко кодировать и использовать RestTemplate, например

 rest.postForObject("http://CRUDSERVICE/addCustomer", request, Customer.class);
  

Где CRUDSERVICE предназначен spring.application.name для службы CRUD.

Я получаю ту же ошибку, что и выше, но на этот раз для CRUDSERVICE.

Для CRUDSERVICE нет доступных экземпляров

Мне нужна помощь для

  1. Как избежать использования жесткого кодирования в RestTemplate
  2. Как использовать ленту с этим проектом

Пожалуйста, обратитесь к моей ссылке на github для ссылки на проект Github