現(xiàn)在負載均衡是通用的解決分壓的技術方案莫其,實現(xiàn)方式一般分為服務端或者客戶端辟癌,服務端大部分是使用中間件實現(xiàn)派歌,spring cloud ribbon 是一個客戶端負載均衡組件埃撵。跟spring cloud eureka雇寇、spring cloud feign 搭配的很默契氢拥,下一篇我們再講解spring cloud feign。
(一) 版本說明
a) Spring boot 2.0.6.RELEASE
b) Spring cloud Finchley.SR2
c) Java version 1.8
d) Spring-cloud-starter-netflix-ribbon 2.0.2.RELEASE
(二) 項目配置
1. 服務端項目配置
a) 服務端主要是提供服務功能锨侯,這里是把當前的端口返回給調用者嫩海,同時把自己注冊到服務中心,調用者通過服務中心調用囚痴。
b) POM設置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
c) 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
d) 主要參數(shù)說明
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!";
}
}
- 重點提示
a) 為了演示負載混驰,3個服務提供者必須設置3個不同的端口,并且其它相同皂贩,不然會被認為是不同的服務栖榨,起不到均衡的作用。
b) LoadBalanced ****該注解實現(xiàn)了負載均衡功能明刷,默認策略是輪詢
4. 項目運行
a) 運行服務提供者
i. 運行3個服務者實例后婴栽,會在服務中心看到如下效果,服務提供者已經注冊成功
b) 運行服務消費者
i. 運行消費者辈末,如下圖所示
c) 打開PostMan愚争,輸入消費者地址轰枝,多刷新幾次捅彻,即可看到負載效果
這樣spring cloud ribbon負載組件就介紹完了,如果在開發(fā)中遇到問題鞍陨,也可以留言共同探討共同進步步淹。