随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

Eureka编程

在一些场景下,我们需要监听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";
    }

}
复制代码

 

posted on   Ruthless  阅读(672)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示