zoukankan      html  css  js  c++  java
  • 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() + "	" +
                        "服务实例:" + event.getAppName() + "	服务下线");
            }
            logger.info(event.getServerId() + "	" + event.getAppName() + "服务下线");
        }

    里面加了个判断,当为生产环境时则发送邮件

        /**
         * 服务注册事件
         * @param event
         */
        @EventListener
        public void listenDown(EurekaInstanceRegisteredEvent event){
            InstanceInfo instanceInfo = event.getInstanceInfo();
            logger.info(MarkerFactory.getMarker("DOWN"), instanceInfo.getAppName() + "服务注册");
        }
  • 相关阅读:
    sshkey批量分发,管理方案
    sersync 配合rsync实时同步备份
    全网实时热备inotify+rsync
    rsync定时同步配置
    全网NFS存储架构详解与分析
    linux新装系统初始化
    Cannot create a secure XMLInputFactory --CXF调用出错
    POJ 2187 /// 凸包入门 旋转卡壳
    POJ 1127 /// 判断线段与线段是否相交
    POJ 2398 map /// 判断点与直线的位置关系
  • 原文地址:https://www.cnblogs.com/zhouyantong/p/9877659.html
Copyright © 2011-2022 走看看