一、導(dǎo)引
服務(wù)調(diào)用出現(xiàn)的問題
- 服務(wù)調(diào)用采取的請求地址是靜態(tài)的,當(dāng)我們使用服務(wù)集群時(shí),很容易造成只能調(diào)用固定的微服務(wù)上的接口。
- 多個(gè)提供者,消費(fèi)者的使用對象無法確定
- 消費(fèi)者無法得知提供者的狀態(tài)
二、Eureka注冊中心
(一)作用:
-
消費(fèi)者如何獲取服務(wù)提供者具體信息
- 服務(wù)提供者啟動(dòng)時(shí)向eureka注冊自己的信息
- eureka保存提供者信息
- 消費(fèi)者根據(jù)服務(wù)名稱向eureka拉取提供者信息
-
如果有多個(gè)服務(wù)提供者,消費(fèi)者該如何選擇
- 服務(wù)消費(fèi)者利用負(fù)載均衡算法,從服務(wù)列表中挑選一個(gè)
-
消費(fèi)者如何感知服務(wù)提供者健康狀態(tài)
- 服務(wù)提供者每隔30s向EurekaServer發(fā)送心跳請求,報(bào)告健康狀態(tài)
- eureka更新記錄服務(wù)列表信息,心跳不正常會(huì)被剔除
- 消費(fèi)者拉取最新信息
(二)、搭建Eureka注冊中心
1、引入spring-cloud-starter-netflix-eureka-server
<dependency>
<gourpId>org.springframework.cloud</gourpId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、編寫啟動(dòng)類,添加@EnableEurekaServer注解
3、添加application.yml
server:
port: 10080 #服務(wù)端口
spring:
application:
name: eurekaserver #服務(wù)名稱
eureka:
client:
serverice-url:
defaultZone: http://127.0.0.1:10080/eureka/ #地址信息
(三)服務(wù)注冊
1、添加eureka客戶端依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>sprin-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、在提供者的配置文件中,添加配置信息
server:
port: 10080 #服務(wù)端口
spring:
application:
name: userservice#服務(wù)名稱
eureka:
client:
serverice-url:
defaultZone: http://127.0.0.1:10080/eureka/ #地址信息
(四)服務(wù)拉取
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表,容納后對服務(wù)列表做負(fù)載均衡.。
1、修改Service實(shí)現(xiàn)類,訪問路徑改為String url = "服務(wù)名" + order.getUserId
2、對RestTemplate添加負(fù)載均衡注釋
@Bean
@LoadBalanced //負(fù)載均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
(五)Ribbon 負(fù)載均衡
1、負(fù)載均衡的原理
負(fù)載均衡流程
Ribbon負(fù)載均衡實(shí)現(xiàn)過程
2、負(fù)載均衡的策略 IRule
(1)負(fù)載均衡策略表
內(nèi)置負(fù)載均衡規(guī)則類 | 規(guī)則描述 |
---|---|
RoundRobinRule | 簡單輪詢服務(wù)列表來選擇服務(wù)器。(默認(rèn)) |
AvailabilityFilteringRule |
對以下兩種服務(wù)器忽略: (1)在默認(rèn)情況下,服務(wù)器如果3次連接失敗,則被設(shè)置為“短路”?!岸搪贰睜顟B(tài)將持續(xù)30s,若無法連接,則增加短路持續(xù)時(shí)間。 (2)并發(fā)數(shù)過高的服務(wù)器。如果一個(gè)服務(wù)器的并發(fā)連接數(shù)過高,配置了AvailabilityFilteringRule規(guī)則的客戶端也會(huì)將其省略,并發(fā)連接數(shù)上限,可由客戶端的【clientName】、【clientConfigNameSpace】、【ActiveConnectionsLimit】進(jìn)行配置 |
WeightedResponseTimeRule | 為每一個(gè)服務(wù)器賦予一個(gè)權(quán)重值。服務(wù)器響應(yīng)時(shí)間越長,這個(gè)服務(wù)器的權(quán)重越小。這個(gè)規(guī)則會(huì)隨機(jī)選擇服務(wù)器,這個(gè)權(quán)重會(huì)影響服務(wù)器的選擇。 |
ZoneAvoidanceRule | 以區(qū)域可用的服務(wù)器為基礎(chǔ)進(jìn)行服務(wù)器的選擇。使用Zone對服務(wù)器進(jìn)行分類,這個(gè)Zone可以理解一個(gè)機(jī)房,一個(gè)機(jī)架等。而對Zone內(nèi)多個(gè)服務(wù)做輪詢。 |
BestAvailablerRule | 忽略短路服務(wù)器,并選擇并發(fā)數(shù)較低的服務(wù)器 |
RandomRule | 隨機(jī)選擇一個(gè)可用服務(wù)器 |
RetryRule | 重試機(jī)制的選擇邏輯 |
(2)負(fù)載均衡規(guī)則修改
方式一:在啟動(dòng)類中定義一個(gè)新的IRule
@Bean
public IRule randomRule(){
return new RandomRule();
}
方式二:在配置文件中修改規(guī)則
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #隨機(jī)負(fù)載均衡規(guī)則
3、饑餓加載
Ribbon默認(rèn)采用 懶加載,即【第一次訪問時(shí)才會(huì)去創(chuàng)建LoadBalanceClient】,請求時(shí)間會(huì)很長。文章來源:http://www.zghlxwxcb.cn/news/detail-594521.html
(1)饑餓加載的作用: 在項(xiàng)目啟動(dòng)時(shí)創(chuàng)建,降低第一次訪問的耗時(shí)。
(2)配置饑餓加載:文章來源地址http://www.zghlxwxcb.cn/news/detail-594521.html
ribbon:
eager-load:
enabled: true #開啟饑餓加載
clients:
- userservice #指定多個(gè)服務(wù)進(jìn)行饑餓加載
- XXservice
到了這里,關(guān)于SpringCloud學(xué)習(xí)路線(3)—— Eureka注冊中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!