如今負載均衡是通用的解決分壓的技術方案,實現方式通常分爲服務端或者客戶端,服務端大部分是使用中間件實現,spring cloud ribbon 是一個客戶端負載均衡組件。跟spring cloud eureka、spring cloud feign 搭配的很默契,下一篇咱們再講解spring cloud feign。spring
(一) 版本說明app
a) Spring boot 2.0.6.RELEASE負載均衡
b) Spring cloud Finchley.SR2fetch
c) Java version 1.8url
d) Spring-cloud-starter-netflix-ribbon 2.0.2.RELEASEspa
(二) 項目配置3d
1. 服務端項目配置rest
a) 服務端主要是提供服務功能,這裏是把當前的端口返回給調用者,同時把本身註冊到服務中心,調用者經過服務中心調用。code
b) POM設置server
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
eureka: datacenter: ctm environment: dev instance: hostname: 192.168.1.78 prefer-ip-address: true ip-address: 192.168.1.129 lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 instance-id: ${eureka.instance.ip-address}:${server.port} client: service-url: defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/ fetch-registry: true register-with-eureka: true healthcheck: enabled: true
d) 主要參數說明
i. eureka.instance.prefer-ip-address 使用IP顯示註冊信息
ii. eureka.instance.ip-address 實例IP地址,
iii. eureka.instance.instance-id 自定義實例id,服務之間調用就是使用該配置,多個實例必須保證惟一性
iv. eureka.client.service-url.defaultZone 註冊中心地址
e) 服務提供者API
@Value("${server.port}") private String getPort; @GetMapping(name = "index", value = "/index") public String Index() { return getPort; }
2. 消費端項目配置
a) POM設置
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
i. 這裏把服務消費端也註冊到了服務治理中心,消費者同時也是其它服務的提供者。
b) application.yml配置文件
eureka: datacenter: ctm environment: dev instance: hostname: 192.168.1.78 prefer-ip-address: true ip-address: 192.168.1.129 lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 instance-id: ${eureka.instance.ip-address}:${server.port} client: service-url: defaultZone: http://${eureka.instance.hostname}:1001/eureka/,http://${eureka.instance.hostname}:1002/eureka/,http://${eureka.instance.hostname}:1003/eureka/ fetch-registry: true register-with-eureka: true healthcheck: enabled: true
c) 服務消費者API
@Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } @Service public class RibbonService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "fallBackIndex") public String Index(){ return restTemplate.getForObject("http://DEMOSERVICEIMPL/index",String.class); } public String fallBackIndex(){ return "hi,ribbon,error!"; } }
3. 重點提示
a) 爲了演示負載,3個服務提供者必須設置3個不一樣的端口,而且其它相同,否則會被認爲是不一樣的服務,起不到均衡的做用。
b) LoadBalanced 該註解實現了負載均衡功能,默認策略是輪詢
4. 項目運行
a) 運行服務提供者
i. 運行3個服務者實例後,會在服務中心看到以下效果,服務提供者已經註冊成功
b) 運行服務消費者
i. 運行消費者,以下圖所示
c) 打開PostMan,輸入消費者地址,多刷新幾回,便可看到負載效果
這樣spring cloud ribbon負載組件就介紹完了,若是在開發中遇到問題,也能夠留言共同探討共同進步。