zoukankan      html  css  js  c++  java
  • 微服务:整合 Spring Boot Admin

    一、前言

      在工作中,其实很多人是不怎么关注邮件,经常是几个小时才看一次邮件。所以我们需要向用户发送即时的消息通知。又随着钉钉用的公司越来越多,于是将消息发送给钉钉也是个不错的选择!

    二、代码演示

    1、首先设置我们的钉钉聊天机器人:

     2、microservice-monitor-server -> DingDingMessageUtil.java

    package com.microservice.minitor.notifier;
    
    import com.alibaba.fastjson.JSONObject;
    
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class DingDingMessageUtil {
        public static String access_token = "钉钉Token";
        public static void sendTextMessage(String msg) {
            try {
                Message message = new Message();
                message.setMsgtype("text");
                message.setText(new MessageInfo(msg));
                URL url = new URL("https://oapi.dingtalk.com/robot/send?access_token=" + access_token);
                // 建立 http 连接
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Charset", "UTF-8");
                conn.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
                conn.connect();
                OutputStream out = conn.getOutputStream();
                String textMessage = JSONObject.toJSONString(message);
                byte[] data = textMessage.getBytes();
                out.write(data);
                out.flush();
                out.close();
                InputStream in = conn.getInputStream();
                byte[] data1 = new byte[in.available()];
                in.read(data1);
                System.out.println(new String(data1));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    class Message {
        private String msgtype;
        private MessageInfo text;
        public String getMsgtype() {
            return msgtype;
        }
        public void setMsgtype(String msgtype) {
            this.msgtype = msgtype;
        }
        public MessageInfo getText() {
            return text;
        }
        public void setText(MessageInfo text) {
            this.text = text;
        }
    }
    class MessageInfo {
        private String content;
        public MessageInfo(String content) {
            this.content = content;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
    }

     2、microservice-monitor-server -> DingDingNotifier.java

    package com.microservice.minitor.notifier;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSONObject;
    import org.springframework.context.expression.MapAccessor;
    import org.springframework.expression.Expression;
    import org.springframework.expression.ParserContext;
    import org.springframework.expression.spel.standard.SpelExpressionParser;
    import org.springframework.expression.spel.support.StandardEvaluationContext;
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import org.springframework.web.client.RestTemplate;
    
    import de.codecentric.boot.admin.server.domain.entities.Instance;
    import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
    import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
    import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
    import reactor.core.publisher.Mono;
    
    
    public class DingDingNotifier extends AbstractStatusChangeNotifier {
    
        public DingDingNotifier(InstanceRepository repository) {
            super(repository);
        }
        @Override
        protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
            String serviceName = instance.getRegistration().getName();
            String serviceUrl = instance.getRegistration().getServiceUrl();
            String status = instance.getStatusInfo().getStatus();
            Map<String, Object> details = instance.getStatusInfo().getDetails();
            StringBuilder str = new StringBuilder();
            str.append("监控报警 : 【" + serviceName + "】");
            str.append("【服务地址】" + serviceUrl);
            str.append("【状态】" + status);
            str.append("【详情】" + JSONObject.toJSONString(details));
            return Mono.fromRunnable(() -> {
                DingDingMessageUtil.sendTextMessage(str.toString());
            });
        }
    }

     3、microservice-monitor-server -> MinitorServerApplication.java

    package com.microservice.minitor;
    
    import com.microservice.minitor.notifier.DingDingNotifier;
    import de.codecentric.boot.admin.server.config.EnableAdminServer;
    import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication
    @EnableAdminServer
    public class MinitorServerApplication {
    
        @Bean
        public DingDingNotifier dingDingNotifier(InstanceRepository repository) {
            return new DingDingNotifier(repository);
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MinitorServerApplication.class, args);
        }
    }

     三、运行测试

     启动项目:

     PC:

    手机:

  • 相关阅读:
    C#_.NetFramework_Web项目_EXCEL数据导出
    Linker Scripts3--简单的链接脚本命令2-Assigning Values to Symbols
    Linker Scripts3--简单的链接脚本命令1
    Linker Scripts2--链接器选项概述
    k64 datasheet学习笔记31---External Bus Interface (FlexBus)
    LwIP Application Developers Manual14---Further lwIP support
    LwIP Application Developers Manual13---Reporting bugs
    LwIP Application Developers Manual12---Configuring lwIP
    LwIP Application Developers Manual11---Initializing lwIP
    LwIP Application Developers Manual10---LwIP IPv4/IPv6 stacks
  • 原文地址:https://www.cnblogs.com/yansg/p/12589675.html
Copyright © 2011-2022 走看看