欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

springCloud入门学习(六):使用Ribbon实现负载均衡

发布时间:2025/6/15 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 springCloud入门学习(六):使用Ribbon实现负载均衡 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

在之前,我使用ip+端口来访问服务提供者。但一般来说,在生产环境中,通常一个服务会有多个实例。那么服务消费者应该如何将请求分摊到多个服务提供者呢?

一、Ribbon

Ribbon是Netflix发布的负载均衡其。当我们为Ribbon配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡的算法,自动帮助服务消费者请求。

二、Ribbon与Eureka配合使用

Riboon会自动从Eureka获取服务提供者的服务列表,然后通过负载均衡算法请求其中的一个实例。

三、整合Riboon

1、修改movie项目,由于已经介入了spring-cloud-starter-eureka包,不必再次引入Ribbon的包,Ribbon单独依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>

2、修改启动类,为RestTemplate添加注解

 @Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

3、修改controller,之前我们是使用ip+端口的方式进行访问的,这里将  ip+端口 改为我们要调动的微服务的serviceId,即服务提供者的spring.application.name字段,这样,Eureka会自动将虚拟主机名英社称微服务的网络地址。如果我们依然通过 ip+端口号 的方式进行访问,实际上我们只能访问其中的一个实例,并没有做到真正的负载均衡。

@RequestMapping(value = "/movie/findById", method = RequestMethod.GET) public Map findById(Integer userId) {log.info("/movie/findById被访问,参数:userId=" + userId);/*ResponseEntity<HashMap> forEntity =this.restTemplate.getForEntity(findByUserIdUrl + userId, HashMap.class);*/return this.restTemplate.getForObject("http://user/user/getUserInfo?userId=" + userId, HashMap.class);}

此时启动movie和eureka项目,同时启动多个user项目

注册中心这里引入了两个user实例

此时访问 http://localhost:8020/movie/findById?userId=1,并且多次访问

获取到结果,说明访问成功。

再来看user的控制台:

另一台端口号为8011的服务也出现了同样的打印信息,说明Ribbon均匀的将请求分配到两个实例中,实现了负载均衡



转载于:https://blog.51cto.com/13593129/2398217

总结

以上是生活随笔为你收集整理的springCloud入门学习(六):使用Ribbon实现负载均衡的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。