Ribbon整合Eureka,出现 No instances available for XXX 异常

本文探讨了在Spring Cloud环境下,使用Ribbon和LoadBalanced注解时遇到的问题,特别是当试图通过RestTemplate发起请求到服务提供者时出现的异常。文章详细解析了错误原因,并提供了两种解决方案:一是利用LoadBalancerClient手动发起HTTP请求,二是选择使用Apache HttpClient或OkHttp作为请求客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请观察这里的片段有没有问题?

    @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个小时左右,?

 

转载于:https://www.cnblogs.com/XingXiaoMeng/p/10958644.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值