先给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]