spring cloud Eureka服务中心监控服务的注册、上线等,及邮件通知

spring cloud Eureka服务中心监控服务的注册、上线等,及邮件通知

Eureka的server端提供了五个监听器,分别是:

EurekaInstanceCanceledEvent 服务下线事件
EurekaInstanceRegisteredEvent 服务注册事件
EurekaInstanceRenewedEvent 服务续约事件(心跳)
EurekaRegistryAvailableEvent Eureka注册中心启动事件
EurekaServerStartedEvent Eureka Server启动事件

在Eureka服务端可监听到服务相应事件,并做相应处理:

1.在Eureka服务端创建类

2.内容

package com.zzcm.atoutiaoeureka.ListenConfig;

import com.netflix.appinfo.InstanceInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.event.EventListener;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;


/**
* @author: luhong 
* @Description 
* @Date 2:52 PM 8/22/2018
* @Param
* @return: 
*/
@Component
@ComponentScan
public class EurekaStateListener {

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

    @Autowired
    private JavaMailSender jms;

    @EventListener(condition = "#event.replication==false")
    public void listen(EurekaInstanceCanceledEvent event) {
        String msg="服务"+event.getAppName()+"\n"+event.getServerId()+"已下线";
        logger.info(msg);
        this.send(msg);
    }

    @EventListener(condition = "#event.replication==false")
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        String msg="服务"+instanceInfo.getAppName()+"\n"+  instanceInfo.getHostName()+":"+ instanceInfo.getPort()+ " \nip: " +instanceInfo.getIPAddr() +"进行注册";
        logger.info(msg);
        this.send(msg);

    }

    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        logger.info("服务{}进行续约", event.getServerId() +"  "+ event.getAppName());
    }

    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        logger.info("注册中心启动,{}", System.currentTimeMillis());
    }

    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        logger.info("注册中心服务端启动,{}", System.currentTimeMillis());
    }

    private  void send(String msg){
        //用于封装邮件信息的实例
        SimpleMailMessage smm=new SimpleMailMessage();
        //由谁来发送邮件
        smm.setFrom("***@qq.com");
        //邮件主题
        smm.setSubject("Eureka-Server");
        //邮件内容
        smm.setText(msg);
        //接受邮件
        smm.setTo(new String[]{"***@qq.com","***@qq.com","***@qq.com"});
        try {
            jms.send(smm);
        } catch (Exception e) {
            logger.info(msg+"错误",e);
        }
    }

}

3.pom.xml文件引入邮件依赖

<!-- SpringBoot 发送邮件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

4.Eureka服务中心端配置文件application.properties配置邮件等信息

spring.application.name=att-eureka-server
#字符集
spring.mail.default-encoding=UTF-8
#电子邮件地址
spring.mail.host=smtp.exmail.qq.com
#邮箱账号名
spring.mail.username=****@qq.com
#授权密码
spring.mail.password=****
#邮箱服务器默认端口
spring.mail.port=25
#协议
spring.mail.protocol=smtp
#一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据
eureka.server.enable-self-preservation=false
#每间隔3秒扫描一次注册的服务,将在客户指定的eureka.instance.leaseExpirationDurationInSeconds时间内没有发送心跳的服务下线
eureka.server.eviction-interval-timer-in-ms=3000
#允许将
eureka.client.registerWithEureka=true
eureka.client.fetch-registry=true

5.客服端需配置心跳机制,客服端配置文件:

spring.application.name=eureka-p
server.port=8511
eureka.client.service-url.defaultZone=http://localhost:8011/eureka/,http://localhost:8011/eureka/
# 每间隔3s,向服务端发送一次心跳,证明自己依然”存活“
eureka.instance.lease-renewal-interval-in-seconds=3
# 告诉服务端,如果我5s之内没有给你发心跳,将我踢出掉。
eureka.instance.lease-expiration-duration-in-seconds=5

6.测试:当服务进行注册‘下线时:

猜你喜欢

转载自blog.csdn.net/luhong327/article/details/82179817
今日推荐