持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
04、第一个Ribbon程序
1、Ribbon介绍
1.1、Ribbon简介
Ribbon是Netflix下的负载均衡项目 在集群中为各个客户端的通信提供了支持 主要实现中间层应用程序的负载均衡 Ribbon提供了以下特性:
- 负载均衡器,可支持拔插式的负载均衡规则
- 对多种协议提供支持,HTTP,TCP,UDP
- 集成了负载均衡功能的客户端
1.2、Ribbon子模块
Ribbon主要有以下三大子模块:
- ribbon-core:该模块为Ribbon项目的核心,主要包括负载均衡的接口定义、客户端接口定义,内置的负载均衡实现等API
- ribbon-eureka:为Eureka客户端提供的负载均衡实现类
- ribbon-httpclient:对Apache的HttpClient进行封装,该模块提供了含有负载均衡功能的REST客户端
1.3、负载均衡组件
Ribbon的负载均衡器主要与集群中的各个服务器进行通讯 负载均衡器主要提供以下基础功能:
维护服务器的IP、DNS名称等信息 根据特定的逻辑在服务器列表中循环 为实现负载均衡的基础功能,Ribbon的负载均衡器有以下三大子模块:
- Rule:一个逻辑组件,这些逻辑将会决定,从服务器列表中返回哪个服务器实例
- Ping:该组件主要使用定时器,来确保服务器网络可以连接
- ServerList:服务器列表,可以通过静态的配置确定负载的服务器,也可以动态指定服务器列表。如果动态指定服务器列表,则会有后台的线程来刷新该列表
编写请求客户端: POM:
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-httpclient</artifactId>
</dependency>
<!-- ribbon消费者的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
/**
* 客户端使用了RestClient 在发送请求时,会使用负载均衡器ILoadBalancer接口,根据特定的逻辑来选择服务器。
*/
@Test
public void RestClientTest() throws Exception {
//ConfigurationManager来配置请求的服务器列表
// ConfigurationManager.getConfigInstance().setProperty("my-client.ribbon.listOfServers",
// "localhost:9999,localhost:8888");
//通过配置文件的方式指定 客户端
ConfigurationManager.loadCascadedPropertiesFromResources("application-ribbon");
//获取REST请求的客户端
RestClient client = (RestClient) ClientFactory.getNamedClient("my-client");
//创建请求实例
HttpRequest request = HttpRequest.newBuilder().uri("/person/8").build();
//
for (int i = 0; i < 6; i++) {
HttpResponse response = client.executeWithLoadBalancer(request);
String result = response.getEntity(String.class);
System.out.println(result);
}
}
配置文件指定客户端:
#配置格式 <client>.<nameSpace>.<property>=<value> 支持.yml文件
#其中<client>为客户的名称,声明该配置属于哪一个客户端,在使用 ClientFactory时传入客户端的名称,即可返回对应的“请求客户端”实例 \
#<nameSpace>配置的命名空间,默认为ribbon, <properties> 为属性名,<value>为属性值。
# 如果想对全部客户端生效,可以将客户端名称去掉,直接 <namespace>.<property>的格式进行配置。以下的配置为客户端指定了服务器列表
my-client.ribbon.listOfServers=localhost:8888,localhost:9999