使用RestTemplate类调用其他系统的url的时候,加上ribbon的注解@LoadBalanced上这个注解之后访问,就报错了。





报错如下:


因为这里你不能直接访问地址,需要把地址改成你所调用的ur在eureka上注册的application.name


将代码修改为如下,就可以访问了


具体原因,我查看了一下源码和网上找了一下,貌似是在加了了注解 @LoadBalanced 之后,我们的r estTemplate 会走这个类RibbonLoadBalancerClient,断点进入了如下的页面,serverid必须是我们访问的服务名称 ,当我们直接输入ip的时候获取的server是null,就会抛出异常



使用服务名称如下图:



仔细想了想,因为ribbon的作用是负载均衡,那么你直接使用ip地址,那么就无法起到负载均衡的作用,因为每次都是调用同一个服务,当你使用的是服务名称的时候,他会根据自己的算法去选择具有该服务名称的服务。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐