利用钉钉机器人Webhook向钉钉群推送告警通知

news2024/11/16 9:48:22

一、配置钉钉群
1、新建一个接收通知的钉钉群
如下图,创建一个接收通知的钉钉群

 

选择项目群,点创建

 

输入群名称,右侧选择群成员,最后点击右下角的创建

 

2、对群进行设置
点群右上角的设置按钮

 

 点击 “智能群助手”

 

点 “添加机器人”

 

点 添加机器人 最右边的 “+”  加号 

 

选最后的 自定义 通过Webhook接入自定义服务

 点 添加

 

 

 输入机器人名字,安全设置里输入自定义的关键字

注意注意:这个自定义关键字必须输入,而且等下在代码里发送消息时,消息的内容体里,必须包含这个关键字,否则钉钉会返回 消息发送失败

点 完成

 

 完成后,会出现下图的画面,点击 复制,把生成的 Webhook复制一下,最后点击 完成

 

完成后,会进入下边的页面

 

 到这里,钉钉群的配置就完成了

二、Java代码的编写
钉钉群配置好,拿到Webhook的值后,就可以在java代码里调用钉钉的消息推送了

下面贴一下代码
 

import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
 
/**
 * @描述 异常告警钉钉通知
 * @创建人 anan
 * @创建时间 2023/1/30 14:03
 */
@Slf4j
public class SendDDMessage {
    
    //这里就是刚才拿到的Webhook的值
    public static final String DING_DING_TOKEN =
            "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 
    public static void sendDDMessage(String msg){
        //钉钉的webhook
        //请求的JSON数据,这里用map在工具类里转成json格式
        Map<String,Object> json=new HashMap();
        Map<String,Object> text=new HashMap();
        json.put("msgtype","text");
        text.put("content","项目告警通知:"+msg);
        json.put("text",text);
        //发送post请求
        String response = SendHttps.sendPostByMap(DING_DING_TOKEN, json);
        log.error("项目告警发送钉钉,响应结果:{}",response);
    }
 
}
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
 
/**
 * @描述 发送http请求的工具类
 * @创建人 anan
 * @创建时间 2023/1/30 14:33
 */
 
public class SendHttps {
 
    private static Logger logger = LoggerFactory.getLogger(SendHttps.class);
 
    /**
     * 发送POST请求,参数是Map, contentType=x-www-form-urlencoded
     *
     * @param url
     * @param mapParam
     * @return
     */
    public static String sendPostByMap(String url, Map<String, Object> mapParam) {
        Map<String, String> headParam = new HashMap();
        headParam.put("Content-type", "application/json;charset=UTF-8");
        return sendPost(url, mapParam, headParam);
    }
 
    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param param 请求参数,
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, Map<String, Object> param, Map<String, String> headParam) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性 请求头
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Fiddler");
 
            if (headParam != null) {
                for (Entry<String, String> entry : headParam.entrySet()) {
                    conn.setRequestProperty(entry.getKey(), entry.getValue());
                }
            }
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(JSON.toJSONString(param));
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            logger.info("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

三、测试发送钉钉通知

写好代码后,下面我们写一个测试类,来测试发送一下钉钉群的通知

/**
 * @描述
 * @创建人 anan
 * @创建时间 2023/1/30 14:50
 */
public class SendMessageTest {
 
    public static void main(String[] args) {
 
        SendDDMessage.sendDDMessage("测试项目告警通知!!!");
 
    }
 
}

点击运行后,可以看到,刚才创建的钉钉群已经收到了我们推送的测试消息

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见测试案例汇总

作者&#xff1a;~小明学编程 文章专栏&#xff1a;测试开发 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 水杯的测试用例 功能性测试 界面测试 性能测试 兼容性测试 易用性测试 安全测试 电梯的测试用例 界面测试 功能测试 性能测试 兼容性…

明明加了唯一索引,为什么还是产生重复数据?

距离上次发稿 已经过去好久了&#xff0c; 开搞&#xff0c;2023第一稿&#xff1b; .还原问题现场 前段时间&#xff0c;为了防止商品组产生重复的数据&#xff0c;我专门加了一张防重表。 问题就出在商品组的防重表上。 具体表结构如下&#xff1a; 为了保证数据的唯一性&a…

《吴军数学通识讲义》读后感

先抛一个问题&#xff0c;一副扑克牌随机发牌&#xff0c;均匀发给三人&#xff0c;已知你手上有两张K&#xff0c;另外两张K&#xff0c;每人一张的概率大&#xff0c;还是分给一个人的概率大&#xff0c;或者这两种场景概率一样&#xff1f; 从小开始学数学&#xff0c;但毕业…

PostgreSQL实战之物理复制和逻辑复制(六)

目录 PostgreSQL实战之物理复制和逻辑复制&#xff08;六&#xff09; 6 延迟备库 6.1 延迟备库的意义 6.2 延迟备库部署 6.3 recovery_min_apply_delay参数对同步复制的影响 PostgreSQL实战之物理复制和逻辑复制&#xff08;六&#xff09; 6 延迟备库 延迟备库是指可以配…

Flink官方例子解析:Flink源码子项目flink-examples

1. 简介 很多朋友在学习Flink的时候都希望能有个demo代码来参考实践&#xff0c;于是在百度或者Google一顿搜索&#xff0c;虽然能找到很多demo代码&#xff0c;但是这些demo要么版本比较旧&#xff0c;要么代码不全&#xff0c;根本跑不通。 其实&#xff0c;Flink官网就提供…

10、矩阵分析

目录 一、向量和矩阵的范数运算 二、矩阵的秩 三、矩阵的行列式 四、矩阵的迹 五、矩阵的化零矩阵 六、矩阵的正交空间 七、矩阵的约化行阶梯形式 八、矩阵空间之间的夹角 MATLAB 提供的矩阵分析函数&#xff1a; 一、向量和矩阵的范数运算 (1)在MATLAB中&#xff0c;…

不平衡数据集的建模的技巧和策略

不平衡数据集是指一个类中的示例数量与另一类中的示例数量显著不同的情况。 例如在一个二元分类问题中&#xff0c;一个类只占总样本的一小部分&#xff0c;这被称为不平衡数据集。类不平衡会在构建机器学习模型时导致很多问题。 不平衡数据集的主要问题之一是模型可能会偏向多…

笔记本怎么录制屏幕?笔记本录屏有这一款就够了

为了携带方便&#xff0c;很多小伙伴都选择笔记本电脑作为自己学习和办公的工具。在使用笔记本时&#xff0c;我们有时需要对它进行屏幕录制&#xff0c;那你知道笔记本怎么录制屏幕吗&#xff1f;怎样才能又快又好地录制屏幕&#xff1f;今天小编就给大家带来一款能高效录制笔…

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基,DBCO-SS-amine

DBCO-SS-NH2,二苯并环辛炔-二硫键-氨基&#xff0c;DBCO-SS-amine 英文名称&#xff1a;DBCO-SS-NH2、DBCO-SS-amine 中文名称&#xff1a;二苯并环辛炔-二硫键-氨基 外 观: 浅黄色或白色固体 分子式: C23H25N3O2S2 分子量: 439.59 存储环境:尽可能储存在-20℃环境下&…

网络原理(TCP/IP)(5)

2.IP协议的核心功能:能够在两点之间规划出来一条合适的路径 1)地址管理&#xff1a;通过一系列的规则&#xff0c;可以把网络上设备的地址给描述出来 2)路由地址&#xff1a;根据当下的源IP和目的地址&#xff0c;规划成一条合适的路径&#xff0c;啥叫合适&#xff1f;关键是看…

【IoT】项目管理:做好敏捷管理,从敏捷看板开始

随着移动互联网、软件即服务&#xff08;SaaS&#xff09;和基于云计算的快速发展&#xff0c;你需要加快你的产品开发周期&#xff0c;将重点工作放在定义核心功能集的前端。 你可以从敏捷软件开发思想中借鉴一些最佳实践&#xff0c;并将这些实践应用于团队管理中。 敏捷思想…

React+eggjs+mysql实现多文件上传

文章目录一、开发环境二、数据库准备files表【视项目需求不同可略过&#xff0c;一般小项目可忽略】1.数据库准备files表的目的2.表结构三、后端接口准备1.配置config2.router.ts中配置路由3.创建controller4.创建service①为什么做这步②创建service/common文件③service/comm…

IronWebScraper for .NET 2023.1 Crack

用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 2023 &#xff1a;Adds support for Microsoft .NET 6 and .NET 7.January 27, 2023 - 17:25 New Version &#xff1a;&#xff1a;&#xff1a; Added support for Microsoft .NET 6 an…

【Java】SpringCloud使用

SpringCloud使用 发起远程调用 根据订单id查询订单的同时&#xff0c;把订单所属的用户信息一起返回&#xff0c;但订单信息和用户信息分属两个不同的模块。 本质上是订单模块向用户模块发起请求&#xff0c;在spring中使用resttemplate发起。 MapperScan("cn.itcast.o…

电脑配置怎么看?这3种方法就可以轻松查看

在我们的日常生活和工作中&#xff0c;我们越来越离不开计算机。对于一台好的电脑&#xff0c;首先&#xff0c;我们需要了解它的配置&#xff0c;以便更好地选择它。电脑配置怎么看&#xff1f;可能还有很多人不知道。别担心&#xff0c;本篇文章就是来教会你如何查看电脑的配…

Android studio集成flutter

1.获取Flutter SDK 视窗安装|扑动 (flutter.dev) 2.配置环境变量 3.Android Studio安装Flutter插件 4.打开管理窗口cmd&#xff0c;输入flutter doctor。 5.因为第二步是感叹号&#xff08;如下图&#xff09;&#xff0c;需要run: flutter doctor --android-licenses&#xf…

基础课程7:多线程与Pad可获得性

目标 GStreamer自动处理多线程&#xff0c;但在某些情况下&#xff0c;您可能需要手动解耦线程。本教程展示了如何做到这一点&#xff0c;此外&#xff0c;还完成了关于Pad可用性的阐述。更准确地说&#xff0c;本文档解释了: 如何为管道的某些部分创建新的执行线程Pad的可用…

SpringCloud之消息总线

spring CloudBus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是&#xff0c;消息总线可以为微服务做监控&#xff0c;也可以作为应用程序之间相互通讯。 一、准备工作 本文还是基于上一篇文章来实现。按照官…

MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

MySQL运维(二)MySQL分库分表详解、读取分离详解 1、MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库&#xff1a;就是一个数据库分成多个数据库&#xff0c;部署到不同机器。 如果业务量剧增&#xff0c;数据库可能会出现性能瓶颈&#xff0c;这时候我们就需…

盘点那些免费好用的高清录屏软件,7款宝藏软件(2023年新版)

有不少的小伙伴私信小编&#xff0c;希望小编能够分享一些好用的高清录屏软件。那么今天&#xff0c;小编就给大家盘点一下那些免费好用的高清录屏软件吧&#xff01;这些都是小编亲自体验过的&#xff0c;有需要的小伙伴赶紧码住收藏&#xff0c;这些宝藏软件错过就难找了&…