十、(Eureka篇)服務(wù)發(fā)現(xiàn)和自我保護(hù)機(jī)制

本文參考:http://www.itdecent.cn/p/cb7fa0aa47a8

一、Eureka 的服務(wù)發(fā)現(xiàn)

EurekaClient 會(huì)從 server 端獲取一份注冊(cè)表信息,將其復(fù)制一份到 client 端本地,然后進(jìn)行調(diào)用訪(fǎng)問(wèn)其它服務(wù)。
所以我們可以在本地獲取到所有注冊(cè)到 Eureka server 端的服務(wù)信息。

1、在 client 端的 主啟動(dòng)類(lèi)加注解 @EnableDiscoveryClient

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class, args);
    }
}

2、通過(guò) Spring 的依賴(lài)注入可以獲取 DiscoveryClient 對(duì)象,通過(guò) DiscoveryClient 我們能發(fā)現(xiàn)其它服務(wù)

import org.springframework.cloud.client.discovery.DiscoveryClient;
...
    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping("/consumer/discovery/info")
    public Object info() {
        //獲取 eureka server 端的所有服務(wù)
        List<String> services =  discoveryClient.getServices();
        for (String service :  services) {
            List<ServiceInstance> instances = discoveryClient.getInstances(service);
            log.info("service is {}", service);
            //獲取所有實(shí)例的信息
            for (ServiceInstance serviceInstance :instances ) {
                log.info("instanceId:{}, serviceId:{}, URI:{}, PORT:{}"
                        , serviceInstance.getInstanceId(), serviceInstance.getServiceId(),serviceInstance.getUri(),serviceInstance.getPort());
            }
        }
        return services;
    }

最終調(diào)用可以打印出所有服務(wù)和實(shí)例信息:


打印信息.png

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

1、什么是 Eureka 的自我保護(hù)機(jī)制?

(1)官方定義:自我保護(hù)模式正是一種針對(duì)網(wǎng)絡(luò)異常波動(dòng)的安全保護(hù)措施,使用自我保護(hù)模式能使Eureka集群更加的健壯、穩(wěn)定的運(yùn)行。
(2)工作機(jī)制:如果在15分鐘內(nèi)超過(guò)85%的客戶(hù)端節(jié)點(diǎn)都沒(méi)有正常的心跳,那么Eureka就認(rèn)為客戶(hù)端與注冊(cè)中心出現(xiàn)了網(wǎng)絡(luò)故障,Eureka Server自動(dòng)進(jìn)入自我保護(hù)機(jī)制,此時(shí)會(huì)出現(xiàn)以下幾種情況:

一、Eureka Server不再?gòu)淖?cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒(méi)收到心跳而應(yīng)該過(guò)期的服務(wù)。

二、Eureka Server仍然能夠接受新服務(wù)的注冊(cè)和查詢(xún)請(qǐng)求,但是不會(huì)被同步到其它節(jié)點(diǎn)上,保證當(dāng)前節(jié)點(diǎn)依然可用。

三、當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前Eureka Server新的注冊(cè)信息會(huì)被同步到其它節(jié)點(diǎn)中。

2、Eureka 的自我保護(hù)機(jī)制的相關(guān)配置

(1)eureka.server.enable-self-preservation=false

關(guān)閉自我保護(hù),保證不可用服務(wù)被即使剔除

(2)eureka.server.eviction-interval-timer-in-ms= 60000

eureka server清理無(wú)效節(jié)點(diǎn)的時(shí)間間隔,默認(rèn)60000毫秒,即60秒

server:
  port: 7001

eureka:
  instance:
#    hostname: localhost      #eureka 服務(wù)端的實(shí)例名稱(chēng)
    hostname: eureka7001.com      #eureka 服務(wù)端的實(shí)例名稱(chēng)
  client:
    register-with-eureka: false     #false表示不向注冊(cè)中心注冊(cè)自己
    fetch-registry: false       #是否去注冊(cè)中心fetch信息,false表示自己就是注冊(cè)中心,所以自己不必找自己去檢索服務(wù)
    service-url:
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    #設(shè)置與eureka server交互的地址查詢(xún)服務(wù)和注冊(cè)服務(wù)都需要依賴(lài)這個(gè)地址
      defaultZone: http://eureka7002.com:7002/eureka/    #設(shè)置與eureka server交互的地址查詢(xún)服務(wù)和注冊(cè)服務(wù)都需要依賴(lài)這個(gè)地址
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 60000
自我保護(hù)機(jī)制打開(kāi).png
自我保護(hù)機(jī)制關(guān)閉.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容