V2.0版本新增支持以下功能
- 新增Dinger层对消息对象配置指定钉钉机器人
- 新增Dinger层统一管理消息对象,
仅支持text和markdown格式
- 支持xml方式配置
- 支持注解方式配置
- 新增关闭指定消息体和
XXXDinger
内定义的所有消息体
SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本
开发环境说明
- JDK1.8
- springboot版本: 2.0.3.RELEASE
快速入门
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×tamp=XXX
- 更改后: URL_PREV×tamp=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