-
Eureka自我保護機制
接着以上篇文章建立的三個工程為基礎(eureka-server,uerreg,myweb),默認Eureka是開啟自我保護的。我們來做個測試,我們先啟動三個工程,我們訪問注冊中心http://localhost:8761/,


我們在開發過程中肯定是不希望這樣的,不利於開發。我們可以關閉Eureka的自我保護機制(實際生產環境不建議關閉)。
- eureka-server服務端
配置文件中我們添加如下配置
#關閉保護機制,以確保注冊中心將不可用的實例正確剔除 eureka.server.enable-self-preservation=false #(代表是5秒,單位是毫秒,清理失效服務的間隔 ) eureka.server.eviction-interval-timer-in-ms=5000
- userreg客戶端
配置文件中我們添加如下配置
# 心跳檢測檢測與續約時間 # 測試時將值設置設置小些,保證服務關閉后注冊中心能及時踢出服務 # 配置說明 # lease-renewal-interval-in-seconds 每間隔10s,向服務端發送一次心跳,證明自己依然”存活“ # lease-expiration-duration-in-seconds 告訴服務端,如果我20s之內沒有給你發心跳,就代表我“死”了,將我踢出掉。 eureka.instance.lease-renewal-interval-in-seconds=10 eureka.instance.lease-expiration-duration-in-seconds=20

此時我們發現,紅色警告變成了自我保護被關閉的警告,且實例被注冊中心剔除,表明此時自我保護機制被關閉。
-
健康檢查
人會生病,就像人一樣服務有時候也會出現異常情況,我們也需要知道某個服務的健康狀況。我們可以通過添加如下依賴,開啟某個服務的健康檢查。以userreg服務為例
pom文件中添加如下依賴
<!--健康檢查依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
ok,其他的什么都不變,我們來訪問一下這個接口http://localhost:9001/health
我們看到了一個很簡短的健康報告:{"description":"Spring Cloud Eureka Discovery Client","status":"UP"},類似的還有
info 顯示任意的應用信息
metrics 展示當前應用的指標信息 true
mappings 顯示所有@RequestMapping路徑的整理列表
trace 顯示trace信息(默認為最新的一些HTTP請求)
health 展示應用的健康信息
beans 顯示一個應用中所有Spring Beans的完整列表
這其中有一些是敏感信息,出於安全考慮,如果不設置
#關掉認證(公網下的生產環境不建議,內網部署可以) #management.security.enabled=false
默認是無法訪問的。
如果我們要訪問查看而且想保證一定的安全性,我們應該做什么呢?我們在userreg的pom文件中引入
<!--安全認證依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
此時我們訪問/beans敏感信息時,彈出如下信息,需要我們進行身份認證

僅僅引入依賴其實是有問題的,因為我們請求正常的業務接口他也會要求進行認證,解決辦法可以在userreg工程的配置文件中添加如下設置:
#(增加了訪問路徑) management.context-path=/admin security.user.name=root security.user.password=123 #只對/admin進行安全認證 security.basic.path=/admin
重啟服務,我們訪問http://localhost:9001/admin/beans,注意哦,我們在配置文件中添加了相對路徑,只對admin進行驗證,此時我們輸入正確的用戶名和密碼(已在配置文件中配置)會顯示我們需要的信息。
-
實戰健康檢查
健康檢查在實際應用場景中有哪些呢?舉個例子,我們配置userreg工程數據源
在pom文件中引入以下依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
然后建立一個配置類,配置數據源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; } }
這個在springboot中已經學習過,后續我會把springboot學習過程以博客的方式記錄下來,配置完成數據源之后,我們啟動服務,訪問http://localhost:9001/admin/health 查看健康情況



作者:謎00016
鏈接:https://www.jianshu.com/p/df61a3273528
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。