首頁(yè) 資訊 Eureka自我保護(hù)機(jī)制、健康檢查的作用、actuator模塊監(jiān)控

Eureka自我保護(hù)機(jī)制、健康檢查的作用、actuator模塊監(jiān)控

來(lái)源:泰然健康網(wǎng) 時(shí)間:2024年12月21日 23:35

在上一篇文章微服務(wù)入門之服務(wù)的注冊(cè)以及服務(wù)之間的調(diào)用中,我們基本實(shí)現(xiàn)了服務(wù)之間的調(diào)用,今天我們來(lái)了解一下Eureka自我保護(hù)機(jī)制以及健康檢查。

Eureka自我保護(hù)機(jī)制

接著以上篇文章建立的三個(gè)工程為基礎(chǔ)(eureka-server,uerreg,myweb),默認(rèn)Eureka是開啟自我保護(hù)的。我們來(lái)做個(gè)測(cè)試,我們先啟動(dòng)三個(gè)工程,我們?cè)L問注冊(cè)中心http://localhost:8761/,

image.png

可以看到,實(shí)例是成功注冊(cè)到中心的。此時(shí)我們將uerreg服務(wù)關(guān)閉,刷新注冊(cè)中心,我們會(huì)發(fā)現(xiàn)如下界面

image.png

我們除了看到了一行紅色的警告信息,還發(fā)現(xiàn)了一件神奇的事情,就是我們的服務(wù)實(shí)例雖然被kill了,但是在服務(wù)注冊(cè)中心他還是存在的。這就是Eureka自我保護(hù)機(jī)制,他不會(huì)剔除已經(jīng)掛掉的服務(wù),他會(huì)認(rèn)為這個(gè)服務(wù)是在嘗試重新連接的。
我們?cè)陂_發(fā)過程中肯定是不希望這樣的,不利于開發(fā)。我們可以關(guān)閉Eureka的自我保護(hù)機(jī)制(實(shí)際生產(chǎn)環(huán)境不建議關(guān)閉)。

eureka-server服務(wù)端
配置文件中我們添加如下配置

#關(guān)閉保護(hù)機(jī)制,以確保注冊(cè)中心將不可用的實(shí)例正確剔除 eureka.server.enable-self-preservation=false #(代表是5秒,單位是毫秒,清理失效服務(wù)的間隔 ) eureka.server.eviction-interval-timer-in-ms=5000 userreg客戶端
配置文件中我們添加如下配置

# 心跳檢測(cè)檢測(cè)與續(xù)約時(shí)間 # 測(cè)試時(shí)將值設(shè)置設(shè)置小些,保證服務(wù)關(guān)閉后注冊(cè)中心能及時(shí)踢出服務(wù) # 配置說(shuō)明 #  lease-renewal-interval-in-seconds 每間隔10s,向服務(wù)端發(fā)送一次心跳,證明自己依然”存活“ #  lease-expiration-duration-in-seconds 告訴服務(wù)端,如果我20s之內(nèi)沒有給你發(fā)心跳,就代表我“死”了,將我踢出掉。 eureka.instance.lease-renewal-interval-in-seconds=10 eureka.instance.lease-expiration-duration-in-seconds=20

我們重新啟動(dòng)服務(wù),然后關(guān)閉userreg客戶端進(jìn)行測(cè)試。

image.png

此時(shí)我們發(fā)現(xiàn),紅色警告變成了自我保護(hù)被關(guān)閉的警告,且實(shí)例被注冊(cè)中心剔除,表明此時(shí)自我保護(hù)機(jī)制被關(guān)閉。

健康檢查

人會(huì)生病,就像人一樣服務(wù)有時(shí)候也會(huì)出現(xiàn)異常情況,我們也需要知道某個(gè)服務(wù)的健康狀況。我們可以通過添加如下依賴,開啟某個(gè)服務(wù)的健康檢查。以u(píng)serreg服務(wù)為例
pom文件中添加如下依賴

... <!--健康檢查依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ...

ok,其他的什么都不變,我們來(lái)訪問一下這個(gè)接口http://localhost:9001/health
我們看到了一個(gè)很簡(jiǎn)短的健康報(bào)告:{"description":"Spring Cloud Eureka Discovery Client","status":"UP"},類似的還有

info 顯示任意的應(yīng)用信息
metrics 展示當(dāng)前應(yīng)用的指標(biāo)信息 true
mappings 顯示所有@RequestMapping路徑的整理列表
trace 顯示trace信息(默認(rèn)為最新的一些HTTP請(qǐng)求)
health 展示應(yīng)用的健康信息
beans 顯示一個(gè)應(yīng)用中所有Spring Beans的完整列表

這其中有一些是敏感信息,出于安全考慮,如果不設(shè)置

#關(guān)掉認(rèn)證(公網(wǎng)下的生產(chǎn)環(huán)境不建議,內(nèi)網(wǎng)部署可以) #management.security.enabled=false

默認(rèn)是無(wú)法訪問的。
如果我們要訪問查看而且想保證一定的安全性,我們應(yīng)該做什么呢?我們?cè)趗serreg的pom文件中引入

... <!--安全認(rèn)證依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ...

此時(shí)我們?cè)L問/beans敏感信息時(shí),彈出如下信息,需要我們進(jìn)行身份認(rèn)證

image.png

僅僅引入依賴其實(shí)是有問題的,因?yàn)槲覀冋?qǐng)求正常的業(yè)務(wù)接口他也會(huì)要求進(jìn)行認(rèn)證,解決辦法可以在userreg工程的配置文件中添加如下設(shè)置:

#(增加了訪問路徑) management.context-path=/admin security.user.name=root security.user.password=123 #只對(duì)/admin進(jìn)行安全認(rèn)證 security.basic.path=/admin

重啟服務(wù),我們?cè)L問http://localhost:9001/admin/beans,注意哦,我們?cè)谂渲梦募刑砑恿讼鄬?duì)路徑,只對(duì)admin進(jìn)行驗(yàn)證,此時(shí)我們輸入正確的用戶名和密碼(已在配置文件中配置)會(huì)顯示我們需要的信息。

實(shí)戰(zhàn)健康檢查

健康檢查在實(shí)際應(yīng)用場(chǎng)景中有哪些呢?舉個(gè)例子,我們配置userreg工程數(shù)據(jù)源
在pom文件中引入以下依賴

... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ...

然后建立一個(gè)配置類,配置數(shù)據(jù)源DataSource

@Configuration public class Myconfig { @Bean public DataSource dataSource() { org.apache.tomcat.jdbc.pool.DataSource dataSource=new org.apache.tomcat.jdbc.pool.DataSource(); dataSource.setUrl("jdbc:mysql://localhost/test?characterEncoding=UTF-8"); dataSource.setUsername("root"); dataSource.setPassword("mysql"); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); return dataSource; } }

這個(gè)在springboot中已經(jīng)學(xué)習(xí)過,后續(xù)我會(huì)把springboot學(xué)習(xí)過程以博客的方式記錄下來(lái),配置完成數(shù)據(jù)源之后,我們啟動(dòng)服務(wù),訪問http://localhost:9001/admin/health 查看健康情況

image.png

我們可以看到db的健康情況。假如此時(shí)我們的mysql服務(wù)掛掉,會(huì)怎樣呢?

image.png

我們手動(dòng)停止mysql服務(wù),然后再看健康情況

image.png

發(fā)現(xiàn)db狀態(tài)已經(jīng)由“UP”變成了“DOWN”并顯示了錯(cuò)誤信息,這樣就很方便我們查看服務(wù)的健康情況了。

</div> </div>

相關(guān)知識(shí)

如何為SpringBoot應(yīng)用設(shè)置健康檢查
spring boot 應(yīng)用在 k8s 中的健康檢查(一)
Oracle健康監(jiān)控及健康檢查(Health Monitor)
一種基于智能家居的遠(yuǎn)程健康監(jiān)控系統(tǒng)的制作方法
Nacos 健康檢查機(jī)制
基于stm32的健康監(jiān)測(cè)儀控制系統(tǒng)設(shè)計(jì)
傳染病防控工作檢查制度
體檢一體機(jī)健康智能體檢一體機(jī)健康監(jiān)測(cè)一體機(jī)
一種基于心電實(shí)時(shí)監(jiān)測(cè)和顯示的健康跑步機(jī)的制作方法
一種老人健康智能監(jiān)測(cè)系統(tǒng)的制作方法

網(wǎng)址: Eureka自我保護(hù)機(jī)制、健康檢查的作用、actuator模塊監(jiān)控 http://www.gysdgmq.cn/newsview709779.html

推薦資訊