Ribbon整合Eureka,出現 No instances available for XXX 異常


請觀察這里的片段有沒有問題?

    @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 = loadBalancerClient.choose("HELLO");
        URI helloUri = URI.create(String.format("http://%s:%s/hello", instance.getHost(), instance.getPort()));
        System.out.println("Target service uri =  "+helloUri.toString());
        return restTemplate.getForObject(helloUri,String.class);
    }

實際上,hi請求映射方法存在問題;問題是 因為  LoadBalancedClient  這里的 choose 根據 Eureka注冊的服務名(ServiceId == spring.application.name) 命中一個服務提供者;這里就不能使用 加了 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個小時左右,😭

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM