0
点赞
收藏
分享

微信扫一扫

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


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() {
// ...
}
}

 

举报

相关推荐

0 条评论