请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

负载轮询

老师:
第一个问题:
您看下面的代码,这是参考您的课程所讲的,一模一样,【RestTemplate没有添加注解:@LoadBalanced】,然后我的疑问是:【这种方式好像不是轮询,他会一直把请求发给一个服务提供方,然后再一直发给另外的一个服务提供方,不是一个个的平均分发的,而是一段时间给a服务提供者,一段时间再给b服务提供者;还有种情况就是一直给其中一个服务提供者发送,另外一个服务提供者接受不到请求,就是我的实际测试和您的视频讲解上的演示不同,这是为什么】

   String serviceId = "SERVICE-USER";
//微服务【这种方式好像不是轮询,他会一直把请求发给一个服务提供方,然后再一直发给另外的一个服务提供方,不是一个个的平均分发的,而是一段时间间隔的】
List<ServiceInstance> instanceList = discoveryClient.getInstances(serviceId);
ServiceInstance userService = instanceList.get(0);
String userServerUrlExecute
        = "http://" + userService.getHost() + ":" + userService.getPort() + "/user/queryByIds?userIds=" + JsonUtils.objectToJson(idSet);

第二个问题:
如果RestTemplate添加注解:@LoadBalanced,使用serviceId 构建请求地址测试确实是一个个的平均分发的。【然后我的疑问是@LoadBalanced的作用?RestTemplate只是一个http请求工具类,应该是向目标url发送请求即可,他怎么会有负载的功能?负载的功能应该是eureka提供的,那既然是eureka提供负载为什么要把@LoadBalanced注解写在RestTemplate上?然道是eureka和RestTemplate他们有整合的地方,eureka可以接受来自RestTemplate的指示?】

正在回答

3回答

风间影月 2021-04-28 15:10:41

https://img1.sycdn.imooc.com//szimg/602290b10854529f15000719.jpg
参考这里加群噢~

0 回复 有任何疑惑可以回复我~
zhuodongLi 2021-05-16 13:32:20

使用了这个注解以后 ,会在  restTemplate 里面 通过 restTemplate.setInterceptors 放入  LoadBalancerInterceptor ,这个过滤器会在 请求远程成接口的时候 动态判断请求的域是不是  负载 负载均衡支付的服务的地址,如果是,那么就会代理 使用 这个负载均衡器 来调用。

0 回复 有任何疑惑可以回复我~
风间影月 2021-04-28 14:47:22

额,这个想的方向错了,这个注解加了就可以提供负载均衡的功能。eureka只是注册中心哈~ 和负载均衡没关系的。负载均衡就是请求转发,其实就是和restTemplate有关系的~

0 回复 有任何疑惑可以回复我~
  • 提问者 慕斯卡2532047 #1
    那负载如果和restTemplate有关系,restTemplate起码要知道服务地址啊,服务地址在eureka中,然道通过这样的地址:String userServerUrlExecute
                    = "http://" + serviceId + "/user/queryByIds?userIds=" + JsonUtils.objectToJson(idSet);   
    
    restTemplate 要拿出所有的服务地址然后在轮询?我的理解对吗?然后我测试了如果用serviceId 构建请求地址,不加@LoadBalanced可是会报错的,这么看我的理解可能是对的,就是serviceId 和 @LoadBalanced要搭配使用,根据serviceId 拿到所有的服务地址然后轮询。
    回复 有任何疑惑可以回复我~ 2021-04-28 14:54:25
  • 风间影月 回复 提问者 慕斯卡2532047 #2
    嗯是啊,他是拿出后自己做轮循的。当然也可以自己通过调用serviceid去手动处理。我记得视频中是一步一步演进的呀~~
    回复 有任何疑惑可以回复我~ 2021-04-28 14:56:49
  • 提问者 慕斯卡2532047 回复 风间影月 #3
    是的,视频中第一步是我的提问的第一个问题,您看下我的第一个问题,第一个问题我实际测试和您视频中的有出入的,问题我刚才改了,第一个问题您再看下,谢谢。
    回复 有任何疑惑可以回复我~ 2021-04-28 15:01:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信