利用spring cloud eureka监控服务,宕机发邮件提醒,以及解决邮件重复发送实例

  先给eureka客户端配置:

#注册中心地址
eureka.client.service-url.defaultZone=http://localhost:9999/eureka/
#服务过期时间配置,超过这个时间没有接收到心跳,服务端就会将这个实例剔除
eureka.instance.lease-expiration-duration-in-seconds=90
#服务刷新时间配置,每隔这个时间会主动心跳一次
eureka.instance.lease-renewal-interval-in-seconds=30

  再给服务端配置:

#本机端口
server.port=9999
spring.application.name=order_moniter
spring.profiles.active=dev
#是否向注册中心注册自己
eureka.client.register-with-eureka=false
#是否从注册中心查询服务
eureka.client.fetch-registry=false
#关闭自我保护
eureka.server.enable-self-preservation=false
#服务端每隔1分钟刷新服务列表,将无效服务剔除
eureka.server.eviction-interval-timer-in-ms=60000
#邮件 spring.mail.host=smtp.163.com spring.mail.username=tangseng2019@163.com spring.mail.password=wlf123456 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.starttls.required=true spring.mail.properties.mail.starttls.enable=true spring.mail.default-encoding=UTF-8 mail.from=${spring.mail.username} mail.to=sunwukong2019@126.com;zhubajie2019@126.com

  接着给eureka服务端加上服务下线监听:

import com.wlf.monitor.order_monitor.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;

@Component
public class EurekaListener {

    private final static SimpleDateFormat SF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Autowired
    MailService mailService;

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        StringBuilder sb = new StringBuilder();
        sb.append("服务ID=");
        sb.append(event.getServerId());
        sb.append(System.getProperty("line.seperator", "\n"));
        sb.append("应用名=");
        sb.append(event.getAppName());
        sb.append(System.getProperty("line.seperator", "\n"));
        sb.append("时间=");
        sb.append(SF.format(event.getTimestamp()));

        mailService.sendSimpleMail("火烧眉毛!!!你的服务挂了,快来救火~~~", sb.toString());
    }
}

  MailService类详见springboot群发邮件问题实例

  好了,现在分别启动eureka服务端和客户端,然后把客户端停掉,观察服务端是否发送邮件:

  服务端日志:

2020-01-03 17:38:37.349  INFO 142432 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-01-03 17:38:38.572  INFO 142432 --- [           main] o.s.c.n.eureka.InstanceInfoFactory       : Setting initial instance status as: STARTING
2020-01-03 17:38:38.634  INFO 142432 --- [           main] com.netflix.discovery.DiscoveryClient    : Initializing Eureka in region us-east-1
2020-01-03 17:38:38.635  INFO 142432 --- [           main] com.netflix.discovery.DiscoveryClient    : Client configured to neither register nor query for data.
2020-01-03 17:38:38.648  INFO 142432 --- [           main] com.netflix.discovery.DiscoveryClient    : Discovery Client initialized at timestamp 1578044318645 with initial instances count: 0
2020-01-03 17:38:38.719  INFO 142432 --- [           main] c.n.eureka.DefaultEurekaServerContext    : Initializing ...
2020-01-03 17:38:38.728  INFO 142432 --- [           main] c.n.eureka.cluster.PeerEurekaNodes       : Adding new peer nodes [http://localhost:9999/eureka/]
2020-01-03 17:38:38.988  INFO 142432 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON encoding codec LegacyJacksonJson
2020-01-03 17:38:38.988  INFO 142432 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using JSON decoding codec LegacyJacksonJson
2020-01-03 17:38:38.988  INFO 142432 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using XML encoding codec XStreamXml
2020-01-03 17:38:38.989  INFO 142432 --- [           main] c.n.d.provider.DiscoveryJerseyProvider   : Using XML decoding codec XStreamXml
2020-01-03 17:38:39.184  INFO 142432 --- [           main] c.n.eureka.cluster.PeerEurekaNodes       : Replica node URL:  http://localhost:9999/eureka/
2020-01-03 17:38:39.197  INFO 142432 --- [           main] c.n.e.registry.AbstractInstanceRegistry  : Finished initializing remote region registries. All known remote regions: []
2020-01-03 17:38:39.198  INFO 142432 --- [           main] c.n.eureka.DefaultEurekaServerContext    : Initialized
2020-01-03 17:38:39.218  INFO 142432 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-01-03 17:38:39.353  INFO 142432 --- [           main] o.s.c.n.e.s.EurekaServiceRegistry        : Registering application ORDER_MONITER with eureka with status UP
2020-01-03 17:38:39.365  INFO 142432 --- [      Thread-16] o.s.c.n.e.server.EurekaServerBootstrap   : Setting the eureka configuration..
2020-01-03 17:38:39.367  INFO 142432 --- [      Thread-16] o.s.c.n.e.server.EurekaServerBootstrap   : Eureka data center value eureka.datacenter is not set, defaulting to default
2020-01-03 17:38:39.367  INFO 142432 --- [      Thread-16] o.s.c.n.e.server.EurekaServerBootstrap   : Eureka environment value eureka.environment is not set, defaulting to test
2020-01-03 17:38:39.385  INFO 142432 --- [      Thread-16] o.s.c.n.e.server.EurekaServerBootstrap   : isAws returned false
2020-01-03 17:38:39.387  INFO 142432 --- [      Thread-16] o.s.c.n.e.server.EurekaServerBootstrap   : Initialized server context
2020-01-03 17:38:39.387  INFO 142432 --- [      Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl    : Got 1 instances from neighboring DS node
2020-01-03 17:38:39.387  INFO 142432 --- [      Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl    : Renew threshold is: 1
2020-01-03 17:38:39.387  INFO 142432 --- [      Thread-16] c.n.e.r.PeerAwareInstanceRegistryImpl    : Changing status to UP
2020-01-03 17:38:39.398  INFO 142432 --- [      Thread-16] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2020-01-03 17:38:39.468  INFO 142432 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9999 (http) with context path ''
2020-01-03 17:38:39.470  INFO 142432 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9999
2020-01-03 17:38:39.472  INFO 142432 --- [           main] c.w.m.o.OrderMonitorApplication          : Started OrderMonitorApplication in 12.772 seconds (JVM running for 15.76)
2020-01-03 17:38:40.937  INFO 142432 --- [)-10.73.166.158] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-01-03 17:38:40.938  INFO 142432 --- [)-10.73.166.158] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-01-03 17:38:40.950  INFO 142432 --- [)-10.73.166.158] o.s.web.servlet.DispatcherServlet        : Completed initialization in 12 ms
2020-01-03 17:39:13.801  INFO 142432 --- [nio-9999-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ORDER_PRIZE/wulf00.home.langchao.com:order_prize:9988 with status UP (replication=false)
2020-01-03 17:39:14.461  INFO 142432 --- [nio-9999-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ORDER_PRIZE/wulf00.home.langchao.com:order_prize:9988 with status UP (replication=true)












2020-01-03 17:39:39.389  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:40:39.389  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:41:39.395  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms



2020-01-03 17:42:39.390  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:43:39.391  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:44:39.391  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:45:39.392  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:45:39.399  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Evicting 1 items (expired=1, evictionLimit=1)
2020-01-03 17:45:39.400  WARN 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : DS: Registry: expired lease for ORDER_PRIZE/wulf00.home.langchao.com:order_prize:9988
2020-01-03 17:45:41.401  INFO 142432 --- [a-EvictionTimer] c.w.m.order_monitor.service.MailService  : 邮件已经发送。
2020-01-03 17:45:41.403  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Cancelled instance ORDER_PRIZE/wulf00.home.langchao.com:order_prize:9988 (replication=false)
2020-01-03 17:46:39.393  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 1ms
2020-01-03 17:47:39.428  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 34ms
2020-01-03 17:48:39.428  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms
2020-01-03 17:49:39.429  INFO 142432 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms

  客户端日志:

2020-01-03 17:39:13.694 |-INFO  [main] org.apache.coyote.http11.Http11NioProtocol [173] -| Starting ProtocolHandler ["http-nio-9988"]
2020-01-03 17:39:13.700 |-DEBUG [DiscoveryClient-InstanceInfoReplicator-0] org.apache.http.wire [73] -|  >> "183[\r][\n]"
2020-01-03 17:39:13.700 |-DEBUG [DiscoveryClient-InstanceInfoReplicator-0] org.apache.http.wire [87] -|  >> "{
    "instance":{
    "instanceId":"wulf00.home.langchao.com:order_prize:9988","hostName":"wulf00.home.langchao.com","app":"ORDER_PRIZE","ipAddr":"10.73.166.158","status":"UP","overriddenStatus":"UNKNOWN","port":{
    "$":9988,"@enabled":"true"},"securePort":{
    "$":443,"@enabled":"false"},"countryId":1,"dataCenterInfo":{
    "@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"}"
2020-01-03 17:39:13.700 |-DEBUG [DiscoveryClient-InstanceInfoReplicator-0] 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值