在一些场景下,我们需要监听eureka服务中心的一些状态,譬如某个微服务挂掉了,我们希望能监听到,并给管理员发送邮件通知或钉钉告警。

一、Eureka的监听事件,可以用来监控、告警
EurekaInstanceRegisteredEvent 服务注册事件
EurekaInstanceRenewedEvent 服务续约事件,续约即心跳
EurekaRegistryAvailableEvent Eureka注册中心启动事件
EurekaServerStartedEvent Eureka Server启动事件
EurekaInstanceCanceledEvent 服务下线事件

package com.mimaxueyuan.cloud.eureka.event;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaRegistryAvailableEvent;
import org.springframework.cloud.netflix.eureka.server.event.EurekaServerStartedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component; import com.netflix.appinfo.InstanceInfo; @Component
public class KevinEventLinstener { private Logger logger = LoggerFactory.getLogger(KevinEventLinstener.class); @EventListener
public void listen(EurekaInstanceRegisteredEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
String ip = instanceInfo.getIPAddr();
String id = instanceInfo.getInstanceId();
logger.info(">>>>>>>>" + id + "已经注册到Eureka,IP=" + ip);
} @EventListener
public void listen(EurekaInstanceRenewedEvent event) {
InstanceInfo instanceInfo = event.getInstanceInfo();
String id = instanceInfo.getInstanceId();
logger.info(">>>>>>>>"+id+"续约事件触发...");
} @EventListener
public void listen(EurekaRegistryAvailableEvent event) {
logger.info(">>>>>>>>注册中心启动事件触发...");
} @EventListener
public void listen(EurekaServerStartedEvent event) {
logger.info(">>>>>>>>EurekaServer启动事件触发...");
} @EventListener
public void listen(EurekaInstanceCanceledEvent event) {
String id = event.getServerId();
logger.info(">>>>>>>>"+id+"从Eureka下线...");
} }

二、注解@DiscoveryClient与@EurekaDiscoveryClient

package com.mimaxueyuan.producer.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class EurekaController { // 以下两个客户端类,用哪个都可以,DiscoveryClient抽象程度更高,是一个接口,EurekaDiscoveryClient只是他的抽象类
@Autowired
private DiscoveryClient discoveryClient; // eureka使用展示
@GetMapping("/eureka/test")
public String eureka() {
System.out.println("eureka使用展示:/eureka/get---start"); // ----------------- 以下的代码使用DiscoveryClient-------------------
// 查询所有注册到Eureka上的服务:
System.out.println("[discoveryClient]-查询所有注册到Eureka上的服务:");
for (String string : discoveryClient.getServices()) {
System.out.println(string);
} // 查询某一个provider的所有Service实例
System.out.println("[discoveryClient]-查询某一个provider的所有Service实例");
List<ServiceInstance> instances = discoveryClient.getInstances("mima-cloud-producer");
for (ServiceInstance instance : instances) {
System.out.println("host:" + instance.getHost() + ",port:" + instance.getPort() + ",serviceId=" + instance.getServiceId() + ",uri=" + instance.getUri());
System.out.println("metadata=" + instance.getMetadata());
} // TODO 已经不推荐使用
ServiceInstance localServiceInstance = discoveryClient.getLocalServiceInstance(); return "eureka's demo, please to see console output";
} }

最新文章

  1. 使用uiautomatorviewer和uiautomator来做android的UI测试
  2. Phantomjs 在cmd命令行显示中文乱码
  3. 第一个sprint与第二个sprint 阶段总结
  4. MVC中Model,不仅仅只是数据的传递者
  5. 笔直的水管 usaco 背包
  6. HTML5之本地文件系统API - File System API
  7. 浅谈jquery关于select框的取值和赋值
  8. [置顶] 【C/C++学习】之十三、虚函数剖析
  9. ArcEngine开发中StartEditing和StartEditOperation的区别
  10. JVM菜鸟进阶高手之路十二(jdk9、JVM方面变化, 蹭热度)
  11. kali git 环境配置
  12. Windows 10 x64 下编译 Hadoop 源码
  13. kindedit编辑器和xxs攻击防护(BeautifulSoup)的简单使用
  14. markdown上下左右,跳至行尾行首,重设快捷键
  15. classLoader.getResourceAsStream中文乱码
  16. json与字符串转换
  17. 一、spring boot 1.5.4入门(web+freemarker)
  18. codeforces水题100道 第十三题 Codeforces Round #166 (Div. 2) A. Beautiful Year (brute force)
  19. LeetCode 38 Count and Say(字符串规律输出)
  20. 【[SCOI2013]摩托车交易 】

热门文章

  1. Solidity的地址 数组如何判断是否包含一个给定的地址?
  2. mysql解压缩版安装方法以及mysql无法启动1067错误
  3. 七、eclipse添加离线约束,使不联网也能有一些代码的提示,例如dubbo
  4. face_recognition 模块安装
  5. powerDesigner 正向工程生成sql注释
  6. kbmmw 5.07 正式发布
  7. PHP 百万级数据导出方案(多 CSV 文件压缩)
  8. VIP之CSC
  9. 内置函数_range()
  10. WebService接口定义及调用