关于Spring Cloud Eureka对服务的上下线监控(重点),续约,注册,启动等
项目上监听各个服务宕机后的信息,提供eureka的5个监听器
EurekaInstanceCanceledEvent 服务下线事件
EurekaInstanceRegisteredEvent 服务注册事件
EurekaInstanceRenewedEvent 服务续约事件
EurekaRegistryAvailableEvent Eureka注册中心启动事件
EurekaServerStartedEvent Eureka Server启动事件
Eureka服务端的配置
server:
port: 8081
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
#关闭自我保护,开发和测试环境可以关闭,生产环境建议打开,防止网络不好时删除了可用服务。
enable-self-preservation: false
#清理间隔
eviction-interval-timer-in-ms: 5000
Eureka事件监听类
package com.itmuch.cloud.EurekaListener;
import com.netflix.appinfo.InstanceInfo;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* Eureka事件监听
*
* @author sunbohu
* @create 2018-11-15 13:45
**/
@Component
public class EurekaStateChangeListener {
@EventListener
public void listen(EurekaInstanceCanceledEvent event) {
System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服务下线");
}
@EventListener
public void listen(EurekaInstanceRegisteredEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
System.err.println(instanceInfo.getAppName() + "进行注册");
}
@EventListener
public void listen(EurekaInstanceRenewedEvent event) {
System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服务进行续约");
}
@EventListener
public void listen(EurekaRegistryAvailableEvent event) {
System.err.println("注册中心 启动");
}
@EventListener
public void listen(EurekaServerStartedEvent event) {
System.err.println("Eureka Server 启动");
}
}
实际项目要根据需求做相应的通知,这里只是简单记录。
客户端配置
spring:
application:
name: member
eureka:
instance:
#这里的instance配置一定要写,不然导致服务下线无法被监听,因为服务下线后eureka没有将该服务踢出
# 每间隔5s,向服务端发送一次心跳,证明自己依然可用存活
lease-renewal-interval-in-seconds: 5
# 告诉服务端,如果我10s之内没有给你发心跳,就代表我的服务下线了变成不可用,将我踢出掉。
lease-expiration-duration-in-seconds: 10
client:
serviceUrl:
defaultZone: http://localhost:8081/eureka/
server:
port: 8082