您好,欢迎来到99网。
搜索
您的当前位置:首页springboot-admin自定义事件通知

springboot-admin自定义事件通知

来源:99网
springboot-admin⾃定义事件通知

springboot-admin组建已经提供了很多开箱即⽤的通知器(例如邮件),但在有些业务场景下我们需要做⼀些企业内部的通知渠道,这就需要我们来⾃定义通知器。

实现其实很简单,只需要往spring注⼊⼀个Notifier类型的实例即可。

当然,我们不会直接实现Notifier,⽽是选择继承AbstractStatusChangeNotifier。

import java.net.URL;

import java.text.DateFormat;

import java.text.SimpleDateFormat;import java.util.Date;

import org.springframework.stereotype.Service;import com.google.gson.Gson;

import com.google.gson.JsonObject;

import de.codecentric.boot.admin.event.ClientApplicationEvent;

import de.codecentric.boot.admin.event.ClientApplicationStatusChangedEvent;import de.codecentric.boot.admin.model.Application;

import de.codecentric.boot.admin.notify.AbstractStatusChangeNotifier;import lombok.extern.slf4j.Slf4j;

/**

* ⾃定义的事件通知者 * @author yangzhilong * */

@Slf4j@Service

public class CustomNotifier extends AbstractStatusChangeNotifier { @Override

protected void doNotify(ClientApplicationEvent event) throws Exception { if (event instanceof ClientApplicationStatusChangedEvent) {

ClientApplicationStatusChangedEvent statusChange = (ClientApplicationStatusChangedEvent) event; // down表⽰服务⾥部分中间件有问题 // offline表⽰服务⽆法http访问了

//if ((statusChange.getTo().isOffline() || statusChange.getTo().isDown()) && !statusChange.getFrom().isUnknown()) { if (statusChange.getTo().isOffline() && !statusChange.getFrom().isUnknown()) { DateFormat sf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\"); Application application = event.getApplication(); // 服务名称

String appName = application.getName(); // 实例名称(在eureka中注册的唯⼀id) String instance = application.getId(); // 事件发⽣的时间

String time = sf.format(new Date(event.getTimestamp())); // 服务器的ip

URL url = new URL(statusChange.getApplication().getServiceUrl()); String server = url.getHost();

// 封装成⾃定义事件对象

JsonObject json = new JsonObject();

json.addProperty(\"appName\ json.addProperty(\"server\

json.addProperty(\"from\ json.addProperty(\"to\ json.addProperty(\"time\ // 事件的全部信息

json.addProperty(\"details\new Gson().toJson(event));

log.warn(\"warn event ,content is:{}\ } } }

@Override

protected boolean shouldNotify(ClientApplicationEvent event) { return super.shouldNotify(event); }}

需要说明的是:当调⽤pause或者erueka的rest来下线服务,并预留点时间后kill服务是不会被认为是告警,直接kill 或者 shutdown是会被认为是异常下线的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务