使用LoadBalanced

问题描述

我是微服务的新手,正在尝试一个演示项目,其中有一个客户微服务与CRUD微服务进行通信。我正在使用Eureka服务器进行发现。 CRUD服务已定义了所有数据库操作,我正在使用RestTemplate从客户微服务中调用在CRUD服务中定义的服务。

The overall flow is like

请注意,它也具有Payment MS,但尚未完全开发。

当我在客户MS RestTemplate postForObject中使用硬编码的url值时,并且不使用@LoadBalanced时。

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

运行正常。

但是,当我在RestTemplate的配置文件中使用@LoadBalanced时,出现以下错误 (我了解到,使用@LoadBalanced时需要删除@EnableEurekaClient。已尝试过,无法正常工作。)

“ trace”:“ java.lang.IllegalStateException:没有可用的实例 本地主机\ n \ tat org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:119)\ n \ tat 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.client.InterceptingClientHttpRequest $ InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)\ n \ tat org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)\ n \ tat 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)\ n \ tat java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机 方法)\ n \ tat java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\ n \ tat java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\ n \ tat java.base / java.lang.reflect.Method.invoke(Method.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.annotation.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)\ n \ tat 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.server.WsFilter.doFilter(WsFilter.java:53)\ 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.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\ 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.FormContentFilter.doFilterInternal(FormContentFilter.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.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)\ 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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\ n \ tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\ n \ tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\ n \ tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\ n \ tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.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)\ n \ tat org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)\ n \ tat 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)\ n \ tat java.base / java.lang.Thread.run(Thread.java:834)\ n“,

我也尝试不进行硬编码,并使用RestTemplate之类的

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

CRUDSERVICE是spring.application.name用于CRUD服务的地方。

我遇到与上述相同的错误,但是这次是CRUDSERVICE。

没有适用于CRUDSERVICE的实例

我需要帮助

  1. 如何避免在RestTemplate中使用硬编码
  2. 如何在此项目中使用功能

请参阅我的项目的github链接 Github link

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)