Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组件。
Ribbon的特点
-
和Eureka完美整合
-
支持多种协议-HTTP,TCP,UDP
-
缓存/批处理
-
built in failure resiliency
具体请查看官方文档 : https://github.com/Netflix/ribbon/wiki
整合Ribbon实现客户端的负载均衡
前期准备
这里用到了上次的两个demo(服务注册中心和服务提供者)。 首先,添加服务提供者的服务,这里我将其端口号打印出来能够更加直观地观察到负载均衡的实现:
@RestController
public
class
PrintfController {
@Value
(
"${server.port}"
)
private
String port;
@RequestMapping
(
"/service"
)
public
String printf(){
System.out.println(
"服务消费者正在使用服务,端口号为 : "
+port);
return
"success"
;
}
}
接下来分别启动这两个工程,注意将服务提供者的端口号(原来为1111改为1112)修改后再启动一次.就整个项目而言,总共有三个微服务再运行着(一个注册中心,两个服务提供者)。PS:其实服务提供者你想弄多少都行。
创建服务消费者
像一个普通的 spring cloud 工程一样,创建后向注册中心注册自己的信息。 添加依赖:
org.springframework.cloud
spring-cloud-starter-ribbon
添加消费调用接口: 这里涉及到一个类LoadBalancerClient
,这个就是由 Netflix Ribbon 提供的工具类。他会根据 ServiceId (配置文件中的Service Name)向 Eureka (注册服务器)获取服务地址。
@RestController
public
class
ConsumerController {
@Autowired
private
LoadBalancerClient client;
@RequestMapping
(
"/test"
)
public
String test(){
ServiceInstance instance = client.choose(
"service"
);
URI uri = instance.getUri();
System.out.println(uri);
return
(
new
RestTemplate()).getForObject(uri+
"/service"
,String.
class
);
}
}
配置文件信息:
# eureka client 配置
spring.application.name=ribbon-consumer
server.port=
2222
eureka.client.serviceUrl.defaultZone=http:
//localhost:8761/eureka/
注意:LoadBalancerClient
返回的是已经注册的服务器地址。
启动服务消费者
启动工程后,我们可以看到如下注册信息:
Ribbon 实现负载均衡
多次访问 http://localhost:2222/test ,并查看控制台信息:
这样子,就实现了客户端的负载均衡了~