0403-Ribbon的基本使用
Posted 木子旭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0403-Ribbon的基本使用相关的知识,希望对你有一定的参考价值。
一、概述
问题1、上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码。即电影微服务调用用户微服务
问题2、用户微服务多个节点,调用服务方如何负载均衡
二、实现负载均衡方式
2.1、服务器端负载均衡
2.2、客户端负载均衡
三、Ribbon
3.1、Ribbon是什么
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
下图展示了Eureka使用Ribbon时候的大致架构:
Ribbon工作时分为两步:第一步先选择 Eureka Server, 它优先选择在同一个Zone且负载较少的Server;第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略,例如轮询round robin、随机Random、根据响应时间加权等。
四、官方文档解读
官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#spring-cloud-ribbon
4.1、引入pom
查看erueka已经有ribbon依赖,此处可以忽略。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
4.2、使用
将RestTemplate具有Ribbon的负载均衡能力,增加@LoadBalanced注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
4.3、修改项目
注意需要先把两个权限注释或者配置一下按照项目中
management:
port: 11111 #actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
context-path: /admin #actuator暴露接口的前缀
security:
enabled: true #actuator是否需要安全保证
roles: SUPERUSER
security:
basic:
enabled: true
path: /admin #针对/admin路径进行认证
user:
name: admin
password: password
将movie服务请求修改为
@GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { //http://127.0.0.1:7900/sample/ //VIP visual IP // HAProxy Heartbeat 软件都有提及VIP return restTemplate.getForObject("http://microservice-provider-user/sample/" + id, User.class); }
调用服务即可。
4.4、修改用户服务端口为7901,在启动一个服务,此时已经有两个微服务提供方
使用Run Configurations或者Debug Configurations配置即可。
4.5、此时负载均衡已经生效。【开始可能没有生效,客户端服务列表没有】默认使用轮询
查看代码:https://github.com/bjlhx15/spring-cloud
microservice-comsumer-movie-ribbon
microservice-discovery-eureka
microservice-provider-user
以上是关于0403-Ribbon的基本使用的主要内容,如果未能解决你的问题,请参考以下文章