eureka監聽各服務狀態並針對服務中斷郵件提醒功能實現


  eureka監聽各服務狀態並針對服務中斷郵件提醒功能實現

  為實現重要服務單點故障的及時修復,  加上Eureka Server 包含對服務5種狀態較完善的監聽實現, 特基於此實現各監聽處理邏輯.

  Eureka-Server的五種事件通知  

  EurekaInstanceCanceledEvent 服務下線事件

  EurekaInstanceRegisteredEvent 服務注冊事件

  EurekaInstanceRenewedEvent 服務續約事件

  EurekaRegistryAvailableEvent Eureka注冊中心啟動事件

  EurekaServerStartedEvent Eureka Server啟動事件

  Java郵箱通知實現

  pom導包:

        <!-- JavaMail-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

  連接郵件服務器(對應的郵箱賬號需開通郵箱服務)

        Properties props = new Properties();
        // 發送服務器需要身份驗證
        props.setProperty("mail.smtp.auth", "true");
        // 設置郵件服務器主機名
        props.setProperty("mail.host", "smtp.163.com");
        // 發送郵件協議名稱
        props.setProperty("mail.transport.protocol", "smtp");

        try {
            // 設置環境信息
            Session session = Session.getInstance(props);

            // 創建郵件對象
            Message msg = new MimeMessage(session);
            msg.setSubject("Eureka Server status check");
            // 設置郵件內容
            msg.setText("服務異常關閉提醒 appName : " + appName + " , serverId : " + serverId);
            // 設置發件人(賬號)
            msg.setFrom(new InternetAddress("niuya***@163.com"));

            Transport transport = session.getTransport();
            // 連接郵件服務器(賬號,授權碼)
            transport.connect("niuya***@163.com", "***");
            // 發送郵件
            transport.sendMessage(msg, new Address[] {new InternetAddress("niuya@***.com")});
            // 關閉連接
            transport.close();
        } catch (Exception e) {
            log.error("send module canceled message error : ", e);
        }

  完整實現

import com.netflix.appinfo.InstanceInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

@Component
public class EurekaStateChangeListener {

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

    @EventListener
    public void listen(EurekaInstanceCanceledEvent eurekaInstanceCanceledEvent) {
        String appName = eurekaInstanceCanceledEvent.getAppName();
        String serverId = eurekaInstanceCanceledEvent.getServerId();
        log.info("module canceled server_id : " + serverId);
        sendCanceledWarnMail(appName,serverId);
    }

    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        log.info("module registered instanceInfo : " + instanceInfo);
    }

    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        String serverId = event.getServerId();
        log.info("module renewed server_id : " + serverId);
    }

    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        String eventStr = event.toString();
        log.info("module available is " + eventStr);
    }

    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        String startStr = event.toString();
        log.info("module start is " + startStr);
    }
}

 


免責聲明!

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



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