请观察这里的片段有没有问题?
@Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } @Autowired private RestTemplate restTemplate; @Autowired private LoadBalancerClient loadBalancerClient; @RequestMapping(value = "/hi") @ResponseBody public String hi() { ServiceInstance instance = ("HELLO"); URI helloUri = (("http://%s:%s/hello", (), ())); ("Target service uri = "+()); return (helloUri,String.class); }
实际上,hi请求映射方法存在问题;问题是 因为 LoadBalancedClient 这里的 choose 根据 Eureka注册的服务名(ServiceId == ) 命中一个服务提供者;这里就不能使用 加了 LoadBalanced注解的RestTemplate对象了,因为会根据 host 去eureka查找服务提供者,这样就会抛异常 :No instances available for XXX ,也就是找不到指定的服务ID拉
可以使用2中方式:
LoadBalancerClient 进行手动的http请求;Ribbon集成了Apache HttpClient 、 OkHttp请求客户端使用;怎么使用自己琢磨去吧。。。
ribbon:
okhttp:
enabled: true
restclient:
enabled: true
mmp,废了3个小时左右,?