首页 > 其他分享 >SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送1.0版本

SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送1.0版本

时间:2022-12-03 23:34:35浏览次数:58  
标签:1.0 String 自定义 DingTalk class keyword return public SpringBoot


V2.0版本新增支持以下功能

  • 新增Dinger层对消息对象配置指定钉钉机器人
  • 新增Dinger层统一管理消息对象,​​仅支持text和markdown格式​
  • 支持xml方式配置
  • 支持注解方式配置
  • 新增关闭指定消息体和​​XXXDinger​​内定义的所有消息体

​​SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本​​

 

开发环境说明

  • JDK1.8
  • springboot版本: 2.0.3.RELEASE

 

快速入门

​V1.0快速使用文档​

 


1.X版本使用文档


引入maven依赖

<dependency>
<groupId>com.github.answerail</groupId>
<artifactId>dingtalk-spring-boot-starter</artifactId>
<version>1.0.5-RELEASE</version>
</dependency>

<!-- okhttp3依赖 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>

 

YAML配置

spring:
dingtalk:
# 必填, 项目ID, 推荐值: ${spring.application.name}
project-id: ${spring.application.name}
# 必填
token-id: c60d4824e0ba4a30544e81212256789331d68b0085ed1a5b2279715741355fbc
# 选填, 自定义关键字
title: 消息推送

​token-id获取方式​​: token-id的值就是机器人的Webhook地址中access_token的值。

 

SpringBoot中使用

text消息类型

public class Demo {
@Autowired
private DingTalkRobot dingTalkRobot;

public void test() {
String keyword = "DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM";
String subTitle = "服务启动通知";
String content = "服务启动异常啦。。。";

// 方式1-text类型
dingTalkRobot.send(MsgTypeEnum.TEXT, keyword, subTitle, content);

// 方式2-text类型带@指定群成员
dingTalkRobot.send(MsgTypeEnum.TEXT, keyword, subTitle, content,
Lists.newArrayList("135XXXXXXXX"));

// 方式3-text类型带@全部群成员
dingTalkRobot.sendAll(MsgTypeEnum.TEXT, keyword, subTitle, content);
}
}

 

markdown消息类型

public class Demo {
@Autowired
private DingTalkRobot dingTalkRobot;

public void test() {
String keyword = "DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM";
String subTitle = "服务启动通知";
String content = "服务启动异常啦。。。";

// 方式1-markdown类型
dingTalkRobot.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content);

// 方式2-markdown类型带@指定群成员
dingTalkRobot.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content,
Lists.newArrayList("135XXXXXXXX"));
}
}

markdown消息体暂时不支持@全部

 


以下为个性化配置部分


定制化配置

如果只是简单的往钉钉群推动消息的, 以上内容可以满足你的需求。如果有需要考虑定制化配置的, 可继续往下阅读, 以下内容为独立配置文档说明, 如需进行整体配置请参考​个性化整体配置

自定义消息体

@Configuration
public class MyConfiguration {
// 自定义text类型消息体
@Bean
public CustomMessage textMessage() {
return (dingTalkProperties, subTitle, keyword, content, phones) -> {
String message = null;
// ...
return message;
};
}

// 自定义markdown类型消息体
@Bean
public CustomMessage markDownMessage() {
return (dingTalkProperties, subTitle, keyword, content, phones) -> {
String message = null;
// ...
return message;
};
}
}

在默认设置的消息体中可以根据keyword字段的值快速定位到系统日志信息

 

默认text消息格式
【通知】 服务启动通知
- 项目名称: oms
- 检索关键字: DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM
- 内容: 服务启动异常啦。。。.

 

默认markdown消息格式

【通知】 服务启动通知
  • 项目名称: oms
  • 检索关键字: DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM
  • 内容: 服务启动异常啦。。。

 

自定义异常回调

@Configuration
public class MyConfiguration {
// 自定义异常回调函数
@Bean
public Notice notice() {
return (dkExCallable) -> {
// ...
};
}
}

调用消息推送时出现异常时回调处理

 

自定义签名体

  • 更改前: URL_PREV&sign=XXX&timestamp=XXX
  • 更改后: URL_PREV&timestamp=XXX&sign=XXX
@Data
@AllArgsConstructor
public class SignDTO extends SignBase {
private String sign;
private Long timestamp;

@Override
public String transfer() {
StringBuilder signStr = new StringBuilder(SEPERATOR);
signStr
.append("timestamp=").append(this.timestamp).append(SEPERATOR)
.append("sign=").append(this.sign);
return signStr.toString();
}
}
@Configuration
public class MyConfiguration {
@Bean
public DkSignAlgorithm<SignDTO> dkSignAlgorithm() {
return new DkSignAlgorithm<SignDTO>() {
@Override
public SignDTO sign(String secret) throws Exception {
Long timestamp = System.currentTimeMillis();
// TODO 使用默认算法, 如果后期算法改变, 可在此更变签名算法
String sign = algorithm(timestamp, secret);
return new SignDTO(sign, timestamp);
}
};
}
}

该功能只针对后期版本变更进行扩展, 当前版本没有使用的必要

 

自定义处理ID生成器

@Configuration
public class MyConfiguration {
@Bean
public DkIdGenerator dkIdGenerator() {
return () -> {
String dkid = null;
// ...
return dkid;
};
}
}

注意ID最好保证全局唯一, ​同步调用直接返回响应结果,异步操作返回处理id(dkid)​。

 

自定义异步执行结果回调处理器

@Configuration
public class MyConfiguration {
@Bean
public DkCallable dkCallable() {
return (dkid, result) -> {
// ...
};
}
}

此处方法形参(dkid, result),其中: dkid也就是异步通知的返回结果, result为请求实际的响应报文字符串。

注意开启异步处理时使用内置线程池, 如果项目中有定义其他线程池配置, 注入线程池对象时请指定线程池名称。 如: ​​@Qualifier("executor")​

 

自定义线程池(可选)

@Configuration
public class MyConfiguration {
@Bean
public Executor dingTalkExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// ...
return executor;
}
}

 

自定义http客户端(可选)

@Configuration
public class MyConfiguration {
@Bean
public OkHttpClient okHttpClient() {
// ...
}
}

 

标签:1.0,String,自定义,DingTalk,class,keyword,return,public,SpringBoot
From: https://blog.51cto.com/u_15891990/5908800

相关文章

  • Dinger(叮鸽),基于springboot实现的群机器人消息发送中间件入门使用
     一、Dinger是什么Dinger(叮鸽)是一个以SpringBoot框架为基础开发的消息发送中间件,对现有两大移动办公系统​​钉钉​​​和​​企业微信​​的群机器人API做了一层封装......
  • SpringBoot集成Redisson实现分布式锁单机版
    SpringBoot集成Redisson实战案例maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></d......
  • SpringBoot使用注解方式集成Redis缓存
    SpringBoot中Redis缓存注解Spring框架中所有的注解都是通过AOP的原理实现的,即Spring框架为我们创建代理对象,代理对象去实现注解的功能。所以当一个支持缓存的方法,在对象内部......
  • SpringBoot整合Mybatis多数据源
    Mybatis中如何配置多数据源一什么情况下会用到多数据库?场景1:一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站的产品数据,......
  • SpringBoot整合Mybatis多数据源
    Mybatis中如何配置多数据源一什么情况下会用到多数据库?场景1:一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站......
  • 安装pymysql报错:File "/usr/local/lib/python2.7/site-packages/PyMySQL-1.0.2-py2.7.
     Traceback(mostrecentcalllast):File"log2user-real.py",line49,in<module>db=create_engine("mysql+pymysql://root:{m_pass}@10.157.2.25:8306/l......
  • ZhiXiMind_V1.0下载,开发必备
    关注微信公众号【工控羊】或者微信号【gksheep】,微信公众号后台输入数字编号【2026】即可获取下载链接。......
  • 图片一键调整工具V1.0-免费版
    一、工具介绍这是博主自己开发的图片一键调整工具V1.0,它可以调整图片宽度和高度、压缩图片大小、改变图片背景、转换图片格式和图片透明化,都是很常用的功能,操作起来简单方......
  • 【SpringBoot】对于yaml的详细学习和三种属性赋值的实战详解
    一.yaml详细讲解1.1什么是yaml?YAML是一种数据序列化语言,通常用于编写配置文件。业界对YAML有不同的看法。有些人会说YAML代表另一种标记语言。其他人认为“YAML不是标记......
  • springbootMVC02(Bean加载控制)
    大纲:本节的问题就是解决"spring和springMVC要加载对应的Bean,要怎么操作"一、思考和处理思路二、对上面图片的总结:三、对解决方法的"代码块"3.1在config包下建"spr......