一、Ribbon简介
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
二、搭建工程
2.1 创建一个服务消费者
(1)右键点击父工程>new>module创建demo_ribbon_restTemplate模块
(2) pom.xml引入eureka-client依赖以及netflix-ribbon依赖
(3)添加application.yml配置文件
server:
port: 9005
spring:
application:
name: demo-ribbon
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8888/eureka
instance:
prefer-ip-address: true #以IP地址注册到服务中心
(4)编写启动类RibbonApplication,添加注解@EnableDiscoveryClient,向服务中心注册。并且向程序的ioc注入一个bean: restTemplate。@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
(5)ribbon包下新建一个包 service。写一个测试类RibboService,通过之前注入ioc容器的restTemplate来消费demo_ribbon_service服务的“/test”接口,在这里我们直接用的服务名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。
(6)ribbon包下新建包 controller,新建一个测试类 TestController,调用RibbonTestService
的方法
2.2 创建一个服务提供者
(1)新建模块,demo_ribbon_service
(2)pom.xml引入eureka-client依赖
(3)添加application.yml配置文件
server:
port: 9001
spring:
application:
name: demo-ribbon-service
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8888/eureka
instance:
prefer-ip-address: true #以IP地址注册到服务中心
(4)编写启动类 EurekaServiceApplication
(5)编写类 ServiceController
(6)启动前面写好的demo_eureka项目。然后启动 demo_ribbon_restTemplate
打开Eureka界面,消费者demo_ribbon已经注册成功了,端口号为9005。
下面启动服务提供者demo_ribbon_service。首先将demo_ribbon_service的端口号修改为9001,启动完成后依次修改为9002和9003再依次重新启动,目的是在Eureka上面注册3个服务提供者,相当于一个小的集群。以便我们观察ribbon负载均衡下服务的调用情况。
同一个项目要启动多次的话需要设置一下
最后上面将会有三个不同端口的demo_ribbon_service服务,最终Eureaka上面注册的服务如下:
(8)在浏览器输入 http://localhost:9005/test?param=111,多次输入后可以观察到端口号依次变化为 9001,9002,9003,服务被依次调用