學院網(wǎng)站整改及建設(shè)情況報告web網(wǎng)頁制作成品
SpringCloud------Eureka修改實例顯示信息、服務發(fā)現(xiàn)Discovery、自我保護(六)
1.actuator微服務信息完善
2.服務發(fā)現(xiàn)Discovery
3.Eureka自我保護
actuator微服務信息完善
web和actuator依賴用于圖形化監(jiān)控
1.主機名稱:服務名稱修改
新增:instance-id
eureka:client:register-with-eureka: true # 表示是否將自己注冊進EurekaServer默認為true# 是否從EurekaServer抓取已有的注冊信息,默認為true,單節(jié)點無所謂,集群必須為true,才能配合ribbon使用負載均衡fetch-registry: trueservice-url:#defaultZone: http://localhost:7001/eureka#defaultZone: http://eureka7001.com/7001/eureka,http://eureka7002.com/7002/eurekadefaultZone: http://localhost:7001/eureka,http://localhost:7002/eurekainstance:instance-id: payment8001 #8002的改為payment8002
修改完重啟后:
健康檢查
點擊對應的服務名
會進入對應的地址:
http://01za3zd23001166.corp.haier.com:8001/actuator/info
改為health:
http://01za3zd23001166.corp.haier.com:8001/actuator/health
會打印出:
{“status”:“UP”}
2.訪問信息有IP信息提示
instance:instance-id: payment8001prefer-ip-address: true # 訪問路徑可以顯示IP地址
如圖所示
服務發(fā)現(xiàn)Discovery
對于注冊進eureka里面的微服務,可以通過服務發(fā)現(xiàn)來獲得該服務的信息。
對于服務提供者Controller進行改造
新增如下代碼:
import org.springframework.cloud.client.discovery.DiscoveryClient;@Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/discovery")public Object discovery(){/*** 獲取服務清單列表*/List<String> services = discoveryClient.getServices();for (String element:services){log.info("***element:*"+element);}/*** 服務名,獲取這個服務下多個實例*/List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");for (ServiceInstance instance:instances){// 實例id/實例IP/實例端口/實例的urllog.info(instance.getInstanceId() +"。"+instance.getHost()+"。"+instance.getPort()+"。"+instance.getUri());}return this.discoveryClient;}
接下來在對生產(chǎn)者的啟動類新增 @EnableDiscoveryClient注解
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class,args);}
}
調(diào)用該接口測試效果如圖:
返回結(jié)果:
{
“services”: [
“cloud-payment-service”,
“cloud-consumer-service”
],
“order”: 0
}
Eureka自我保護
保護模式主要用于一組客戶端和Eureka Server之間存在網(wǎng)絡分區(qū)場景下的保護。
一旦進入保護模式,Eureka Server將會嘗試保護其服務注冊表中的信息,不再刪除服務注冊表中的數(shù)據(jù),也就是不會注銷任何微服務。
如果Eureka Serve頁面中看到如下信息,說明Eureka進入了保護模式:
意思是:
某一時刻某個微服務不可用了,Eureka不會立刻清理,依舊會對該微服務的信息進行保存。
屬于CAP理論中的AP分支
設(shè)計原因:
為了防止Client可以正常運行,但是Eureka Server網(wǎng)絡不通情況下,Eureka Server不會立刻將Client服務剔除。
默認時間是90s
簡單地說就是防止因為網(wǎng)絡原因,錯誤注銷正常的服務。
寧可保護錯誤的服務注冊信息,也不盲目注銷任何可能健康的服務實例
如何禁止自我保護
修改注冊端的配置
默認開啟自我保護
eureka.server.enable-self-preservation: true 默認為true開啟
eviction-interval-timer-in-ms: 2000 # 心跳時間改為2s,2000毫秒
改為false即可禁止自我保護。
eureka:client:register-with-eureka: true # 表示是否將自己注冊進EurekaServer默認為true# 是否從EurekaServer抓取已有的注冊信息,默認為true,單節(jié)點無所謂,集群必須為true,才能配合ribbon使用負載均衡fetch-registry: trueservice-url:#defaultZone: http://localhost:7001/eureka#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurekadefaultZone: http://localhost:7001/eureka# ,http://localhost:7002/eurekaserver:enable-self-preservation: false # 禁用自我保護eviction-interval-timer-in-ms: 2000 # 心跳時間改為2s,2000毫秒
客戶端同樣可以修改發(fā)送心跳時間間隔
lease-renewal-interval-in-seconds: 10 #默認為30s,發(fā)送一次心跳, 修改客戶端向服務器端發(fā)送心跳的時間間隔,單位為秒
lease-expiration-duration-in-seconds: 2 #eureka服務器端在收到最后一次心跳后等待時間的上線,單位為秒,默認為90s
# 超時將剔除服務
eureka:client:register-with-eureka: true # 表示是否將自己注冊進EurekaServer默認為true# 是否從EurekaServer抓取已有的注冊信息,默認為true,單節(jié)點無所謂,集群必須為true,才能配合ribbon使用負載均衡fetch-registry: trueservice-url:#defaultZone: http://localhost:7001/eureka#defaultZone: http://eureka7001.com/7001/eureka,http://eureka7002.com/7002/eurekadefaultZone: http://localhost:7001/eureka# ,http://localhost:7002/eurekainstance:instance-id: payment8001prefer-ip-address: true # 訪問路徑可以顯示IP地址lease-renewal-interval-in-seconds: 1 #默認為30s,發(fā)送一次心跳, 修改客戶端向服務器端發(fā)送心跳的時間間隔,單位為秒lease-expiration-duration-in-seconds: 2 #eureka服務器端在收到最后一次心跳后等待時間的上限,單位為秒,默認為90s# 超時將剔除服務
以上是Eureka的全部內(nèi)容。
Eureka停更后怎么辦?
切換其他的注冊中心,或者繼續(xù)使用。
目前是停更不停用的階段。
https://github.com/Netflix/eureka/wiki
2.0以后就不再更新
1.x依然是一個活動的工程