springcloud Eureka設置服務下線上線事件通知


最近由於微服務會莫名其妙掛掉,導致一些服務宕機;

固所以尋找解決辦法,莫名宕機暫時還未查明原因,先人肉解決辦法

Eureka的server端會發出5個事件通知,分別是:

EurekaInstanceCanceledEvent 當有服務下線時會執行
EurekaInstanceRegisteredEvent 當有服務注冊時會執行
EurekaInstanceRenewedEvent 當有服務續約時會執行
EurekaRegistryAvailableEvent Eureka注冊中心啟動執行

EurekaServerStartedEvent Eureka Server啟動時執行

由於Eureka擁有自我保護機制,當其注冊表里服務因為網絡或其他原因出現故障而關停時,Eureka不會剔除服務注冊,而是等待其修復。這是AP的一種實現。

我們可以采取關閉此功能,讓其剔除不健康節點,從而導致執行EurekaInstanceCanceledEvent事件

服務端

eureka:
    server:
        #設為false,關閉自我保護
        enableSelfPreservation: false
        #檢測間隔(單位毫秒,默認是1分鍾)
        evictionIntervalTimerInMs: 4000

客戶端

eureka:
    instance:
        #租期更新時間間隔 (單位秒,默認30秒)
        leaseRenewalIntervalInSeconds: 10
        #租期到期時間 (單位秒,默認90秒)
        leaseExpirationDurationInSeconds: 30
    #開啟健康檢查(需要spring-boot-starter-actuator依賴)
    client:
        healthcheck: enabled 

注意:更改Eureka更新頻率將打破服務器的自我保護功能


現在開始說eureka服務端代碼事件

之前博客有集成郵件的,在此略過。。直接上代碼

在Eureka server里直接添加就行

/**
 * eureka狀態改變監聽器
 *
 * @Author zyt
 * @Date 2018/10/29 10:15
 */
@Component
public class EurekaStateChangeListener {

    private static final Logger logger = LoggerFactory.getLogger(EurekaStateChangeListener.class);

    /** 區分生產環境 */
    @Value("${spring.profiles.active}")
    String active;

    /**
     * 服務下線事件
     * @param event
     */
    @EventListener
    public void listenDown(EurekaInstanceCanceledEvent event){
        if (active.equals("production")) {
            // 發送郵件
            logger.info(MarkerFactory.getMarker("DOWN"), "服務ID:" + event.getServerId() + "\t" +
                    "服務實例:" + event.getAppName() + "\t服務下線");
        }
        logger.info(event.getServerId() + "\t" + event.getAppName() + "服務下線");
    }

里面加了個判斷,當為生產環境時則發送郵件

    /**
     * 服務注冊事件
     * @param event
     */
    @EventListener
    public void listenDown(EurekaInstanceRegisteredEvent event){
        InstanceInfo instanceInfo = event.getInstanceInfo();
        logger.info(MarkerFactory.getMarker("DOWN"), instanceInfo.getAppName() + "服務注冊");
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM