开端
目前主流的负载方案一般为两种:一种是集中式的负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件(F5),也有软件(Nginx)。另一种则是客户端自己做负载均衡。我觉得使用Nginx也是一个不错的方式,但是这样我们还要令开一块专题去学习,既然在学Spring Cloud,我们就来试试使用Netflix开源的Ribbon做负载。
另外ribbon的内容不是特别多,我们在此还会学习另一个知识点,声明式REST客户端Feign。
Ribbon
开始学习Ribbon。
了解
首先还是来了解一下Ribbon的基本模块:
- ribbon-loadbalancer:负载均衡模块,内置的负载均衡算法都实现在其中。
- ribbon-eureka:基于Eureka封装的模块,能够快速集成。
- ribbon-transport:基于Netty实现多协议的支持,比如HTTP、TCP、UDP等。
- ribbon-httpclient:基于Apache HttpClient封装的REST客户端,集成了负载均衡模块,可以直接在项目中调用接口。
- ribbon-example:代码示例,供学习。
- ribbon-core:核心且通用的代码,客户端API的一些配置和其他API的定义。
使用
浅尝
结束初步的了解,咱们直接开始上手。关于我们之前Eureka的项目文件,大家可以放在一起,右键每一个pom文件后使用add as maven project功能构建。如此:
这样一来就方便大家管理项目,以及统一启动和终止。我们首先复制一份eureka-client项目,创建一个消费者集群。启动类、控制层、配置文件、Maven文件的修改这里就不写了,都是些小细节。我将这个项目的端口设置为8084,然后启动,回到注册中心就可以看到集群成功。
现在我们需要右键外面的大项目文件夹,重新创建一个ribbon-native-demo项目,创建方式同client。为pom添加依赖:
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-loadbalancer</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
</dependency>
复制一份client的yml,修改应用名为ribbon-native-demo,端口为8083。然后写一个测试类调用hello接口。
public static void main(String[] args) {
List<Server> serverList = Lists.newArrayList(
new Server("localhost", 8081),
new Server("localhost", 8084)
);
ILoadBalancer loadBalancer = LoadBalancerBuilder.newBuilder()
.buildFixedServerListLoadBalancer(serverList);
for (int i