代碼地址
代碼上傳到:https://github.com/13thm/study_springcloud/tree/main/days3
Eureka基礎(chǔ)知識
什么是服務(wù)治理
Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實(shí)現(xiàn)服務(wù)治理
什么是服務(wù)注冊與發(fā)現(xiàn)
Eureka采用了CS的設(shè)計(jì)架構(gòu),Eureka Server 作為服務(wù)注冊功能的服務(wù)器,它是服務(wù)注冊中心。而系統(tǒng)中的其他微服務(wù),使用 Eureka的客戶端連接到 Eureka Server并維持心跳連接。這樣系統(tǒng)的維護(hù)人員就可以通過 Eureka Server 來監(jiān)控系統(tǒng)中各個微服務(wù)是否正常運(yùn)行。
在服務(wù)注冊與發(fā)現(xiàn)中,有一個注冊中心。當(dāng)服務(wù)器啟動的時候,會把當(dāng)前自己服務(wù)器的信息 比如 服務(wù)地址通訊地址等以別名方式注冊到注冊中心上。另一方(消費(fèi)者|服務(wù)提供者),以該別名的方式去注冊中心上獲取到實(shí)際的服務(wù)通訊地址,然后再實(shí)現(xiàn)本地RPC調(diào)用RPC遠(yuǎn)程調(diào)用框架核心設(shè)計(jì)思想:在于注冊中心,因?yàn)槭褂米灾行墓芾砻總€服務(wù)與服務(wù)之間的一個依賴關(guān)系(服務(wù)治理概念)。在任何rpc遠(yuǎn)程框架中,都會有一個注冊中心(存放服務(wù)地址相關(guān)信息(接口地址))
下左圖是Eureka系統(tǒng)架構(gòu),右圖是Dubbo的架構(gòu),請對比
Eureka包含兩個組件:Eureka Server和Eureka Client
單機(jī)版eurekaServer
IDEA生成eurekaServer端服務(wù)注冊中心類似物業(yè)公司
- 建Module cloud-eureka-server7001
- 改POM
- 寫YML
- 主啟動
- 測試 http://localhost:7001/
![]()
具體看代碼
EurekaClient端cloud-provider-payment8001
修改之前的cloud-provider-payment8001
1.修改pom文件,添加配置
2.在主類添加注解
3.在yml修改配置
具體看代碼
4.測試 http://localhost:7001/
修改EurekaClient端cloud-consumer-order80
1.pom
2.主啟動類 ,加注解
3.寫yml
具體請看代碼
4.啟動測試
集群Eureka構(gòu)建步驟
新建cloud-eureka-server7002
1.改POM
2.修改映射配置
C:\Windows\System32\drivers\etc
添加:
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
3.寫YML
7001 改
7002 改
具體看代碼
測試
將之前寫的微服務(wù)加入Eureka集群
將支付服務(wù)8001微服務(wù)發(fā)布到上面2臺Eureka集群配置中 --改YML
將訂單服務(wù)80微服務(wù)發(fā)布到上面2臺Eureka集群配置中--改YML
測試
先要啟動EurekaServer,7001/7002服務(wù),再要啟動服務(wù)提供者provider,8001,再要啟動消費(fèi)者,80
測試網(wǎng)址:
http://eureka7002.com:7002/
http://eureka7001.com:7001/
http://localhost/consumer/payment/get/1
新建cloud-provider-payment8002 (提供集群服務(wù)者)
1.新建cloud-provider-payment8002(跟8001 幾乎一致)
2.改POM
3.寫YML
4.主啟動
5.業(yè)務(wù)類(粘貼過來)
6.修改8001/8002的Controller主要還是看代碼
哪里變化了
添加:
@Value("${server.port}")
private String serverPort;
修改了返回值:添加了服務(wù)端口
return new CommonResult(200,"插入成功,返回結(jié)果"+result+"\t 服務(wù)端口:"+serverPort,payment);
return new CommonResult(200,"查詢成功"+"\t 服務(wù)端口:"+serverPort,payment);
修改80 controller
public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
添加
測試:
http://localhost/consumer/payment/get/1
http://eureka7001.com:7001/eureka
actuator微服務(wù)信息完善
鼠標(biāo)放上去沒有顯示ip地址
修改8001的yml 和8002的yml
添加
instance:
instance-id: payment8001
prefer-ip-address: true #訪問路徑可以顯示IP地址
instance:
instance-id: payment8002
prefer-ip-address: true #訪問路徑可以顯示IP地址
服務(wù)發(fā)現(xiàn)Discovery
對于注冊進(jìn)eureka里面的微服務(wù),可以通過服務(wù)發(fā)現(xiàn)來獲得該服務(wù)的信息
修改cloud-provider-payment8001的Controller 和 修改cloud-provider-payment8002的Controller
添加以下代碼:(具體看下載代碼)
@Resource
private DiscoveryClient discoveryClient;
@GetMapping(value = "/payment/discovery")
public Object discovery()
{
List<String> services = discoveryClient.getServices();
for (String element : services) {
System.out.println(element);
}
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance element : instances) {
System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
+ element.getUri());
}
return this.discoveryClient;
}
在8001 和8002主啟動類添加注解@EnableDiscoveryClient
測試
http://localhost:8001/payment/discovery
Eureka自我保護(hù)(這章沒有修改下載代碼)
保護(hù)模式主要用于一組客戶端和Eureka Server之間存在網(wǎng)絡(luò)分區(qū)場景下的保護(hù)。一旦進(jìn)入保護(hù)模式,
Eureka Server將會嘗試保護(hù)其服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù),也就是不會注銷任何微服務(wù)。
一句話:某時刻某一個微服務(wù)不可用了,Eureka不會立刻清理,依舊會對該微服務(wù)的信息進(jìn)行保存
怎么禁止自我保護(hù)?
注冊中心eureakeServer端7001
出廠默認(rèn),自我保護(hù)機(jī)制是開啟的:文章來源:http://www.zghlxwxcb.cn/news/detail-800749.html
eureka.server.enable-self-preservation=true
要把他關(guān)閉,使用eureka.server.enable-self-preservation = false
可以禁用自我保護(hù)模式(注冊中心eureakeServer端7001 的yml 里面改)文章來源地址http://www.zghlxwxcb.cn/news/detail-800749.html
修改生產(chǎn)者客戶端eureakeClient端8001
server:
port: 8001
###服務(wù)名稱(服務(wù)注冊到eureka名稱)
spring:
application:
name: cloud-provider-payment
eureka:
client: #服務(wù)提供者provider注冊進(jìn)eureka服務(wù)列表內(nèi)
service-url:
register-with-eureka: true
fetch-registry: true
# cluster version
#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
# singleton version
defaultZone: http://eureka7001.com:7001/eureka
#心跳檢測與續(xù)約時間
#開發(fā)時設(shè)置小些,保證服務(wù)關(guān)閉后注冊中心能即使剔除服務(wù)
instance:
#Eureka客戶端向服務(wù)端發(fā)送心跳的時間間隔,單位為秒(默認(rèn)是30秒)
lease-renewal-interval-in-seconds: 1
#Eureka服務(wù)端在收到最后一次心跳后等待時間上限,單位為秒(默認(rèn)是90秒),超時將剔除服務(wù)
lease-expiration-duration-in-seconds: 2
到了這里,關(guān)于springcloud Eureka服務(wù)注冊與發(fā)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!