栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于监控nacos服务实例数量以及告警钉钉消息通知

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于监控nacos服务实例数量以及告警钉钉消息通知

需求:监控指定系统的实例数量,在有节点掉线时进行钉钉消息推送 监听代码:
 //相关依赖
		
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            ${nacos.version}
        
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.NamingEvent;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.extrotec.entity.SendMessageIn;
import com.extrotec.utils.DingTalkUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;


@Slf4j
@Component
public class ServiceStatusListner {

    @Value("${dingtalk.webhook}")
    private String webhook;

    @Value("${dingtalk.secret}")
    private String secret;

    @Value("${dingtalk.userMobil}")
    private String[] userMobil;

    @Value("${spring.cloud.nacos.discovery.server-addr}")
    private String nacosUrl;

    private static Map cache = new ConcurrentHashMap<>();
    //初始化监听服务上下线
    @PostConstruct
    public void init() throws Exception {
        List mobileList = new ArrayList<>();
        for(String mobile : userMobil){
            mobileList.add(mobile);
        }

        Properties properties = System.getProperties();
        properties.setProperty("serverAddr", nacosUrl);
        properties.setProperty("namespace", "public");
        NamingService naming = NamingFactory.createNamingService(properties);
        List serviceNames = new ArrayList<>();
        serviceNames.add("xxx");
        serviceNames.add("xxxcenter");
        serviceNames.add("xxxgateway");
        for(String service : serviceNames) {
            naming.subscribe(service, event -> {
                List instances =  ((NamingEvent)event).getInstances();
                String serviceName = ((NamingEvent)event).getServiceName();
                cache.computeIfAbsent(serviceName, k -> instances.size());
                if(cache.get(serviceName)  
钉钉推送工具类: 
//钉钉消息推送依赖

            com.aliyun
            alibaba-dingtalk-service-sdk
            1.0.1
            
                
                    log4j
                    log4j
                
            

@Data
public class SendMessageIn {

    //消息类型
    private String msgType;
    //webhook
    private String webhook;
    //密钥
    private String secret;
    //文本
    private String text;
    //指定对象
    private List mobileList;
    //是否推送所有人
    private boolean isAtAll;
}
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.extrotec.entity.SendMessageIn;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.base64;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class DingTalkUtil {
    //文本消息
    private static final String TEXT = "text";

    
    public static void sendMessage(SendMessageIn in){
        try {
            log.info("开始推送钉钉消息:" + in);
            Long timestamp = System.currentTimeMillis();
            String secret = in.getSecret();

            String stringToSign = timestamp + "n" + secret;
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            String sign = URLEncoder.encode(new String(base64.encodebase64(signData)), "UTF-8");

            DingTalkClient client = new DefaultDingTalkClient(in.getWebhook() + "×tamp=" + timestamp + "&sign=" + sign);
            OapiRobotSendRequest request = new OapiRobotSendRequest();

            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            if (in.isAtAll() || in.getMobileList() == null || in.getMobileList().size() == 0) {
                //推送所有人
                at.setIsAtAll(true);
            } else {
                //推送指定用户
                at.setAtMobiles(in.getMobileList());
                at.setIsAtAll(false);
            }
            request.setAt(at);

            //文本消息
            if (TEXT.equals(in.getMsgType())) {
                request.setMsgtype(TEXT);
                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
                text.setContent(in.getText());
                request.setText(text);
            }

            OapiRobotSendResponse response = client.execute(request);
            log.info("钉钉推送返回结果:" + response);
        }catch (Exception e){
            log.error("钉钉通知异常");
        }
    }

    public static void main(String[] args){
        List mobileList = new ArrayList<>();
        mobileList.add("1811111111");

        SendMessageIn in = new SendMessageIn();
        in.setMsgType(TEXT);
        in.setAtAll(false);
        in.setMobileList(mobileList);
        in.setWebhook("https://oapi.dingtalk.com/robot/send?access_token=9xxxxxxxx");
        in.setSecret("SEC2ca0e08d0b19");
        in.setText("桃花坞里桃花庵,桃花庵下桃花仙");
        sendMessage(in);
    }
}
结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号