* 我的博客空間 : https://zggdczfr.cn/ *java
Spring Cloud Netflix Ribbon 是一個客戶端負載均衡的組件。git
Ribbon的特色github
和Eureka完美整合spring
支持多種協議-HTTP,TCP,UDP緩存
緩存/批處理服務器
built in failure resiliencyapp
具體請查看官方文檔 : https://github.com/Netflix/ribbon/wiki負載均衡
這裏用到了上次的兩個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 工程同樣,建立後向註冊中心註冊本身的信息。
添加依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
添加消費調用接口:
這裏涉及到一個類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
返回的是已經註冊的服務器地址。
啓動工程後,咱們能夠看到以下注冊信息:
屢次訪問 http://localhost:2222/test ,並查看控制檯信息:
這樣子,就實現了客戶端的負載均衡了~