-
Notifications
You must be signed in to change notification settings - Fork 77
Dinger 2.4 多机器人配置
Jaemon edited this page Jul 18, 2021
·
5 revisions
由于钉钉和企业微信有消息发送频率限制-每个机器人每分钟最多发送20条,这种限制可能导致消息发送失败的问题,而多机器人配置
就是为了解决这种情况的。
目前Dinger提供两种方式多机器人配置支持,大家可以根据实际情况选择合适的配置方式,相对于全局配置方式,Dinger级别是更细粒度的配置方式。
@SpringBootApplication
@DingerScan(basePackages = "com.jaemon.demo.dinger")
// 启用多机器人配置功能
@EnableMultiDinger(
// 启用钉钉多机器人配置
@MultiDinger(
dinger = DingerType.DINGTALK,
handler = DingTalkMultiHandler.class
)
)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
public class DingTalkMultiHandler implements DingerConfigHandler {
@Override
public List<DingerConfig> dingerConfigs() {
List<DingerConfig> dingerConfigs = new ArrayList<>();
// 注意这里的dingerConfig根据实际情况配置
dingerConfigs.add(
DingerConfig.instance("tokenId1", "secret1")
);
dingerConfigs.add(
DingerConfig.instance("tokenId2", "secret2")
);
dingerConfigs.add(
DingerConfig.instance("tokenId3", "secret3")
);
return dingerConfigs;
}
@Override
public Class<? extends AlgorithmHandler> algorithmHandler() {
// 使用轮询算法
return RoundRobinHandler.class;
}
}
DingerConfigHandler中支持@Autowire注解来注入bean对象
@SpringBootApplication
@DingerScan(basePackages = "com.jaemon.demo.dinger")
// 启用多机器人配置功能
@EnableMultiDinger
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
// 为UserDinger配置多机器人功能
@MultiHandler(
@MultiDinger(
dinger = DingerType.DINGTALK,
handler = DingTalkMultiHandler.class)
)
public interface UserDinger {
@DingerText(value = "恭喜用户${loginName}登录成功!")
DingerResponse success(@Parameter("loginName") String userName);
@DingerMarkdown(
value = "#### 用户登录通知\n - 用户Id: ${userId}\n - 用户名: ${userName}",
title = "用户登录反馈"
)
DingerResponse failed(long userId, String userName);
}
@Dinger中指定的Dinger类型如果和@MultiHandler中不一致会致使多机器配置失效而选择默认配置发送
- DefaultHandler: 返回默认使用的机器人账号
-
DingerHandler: 消息频率限制-每个机器人每分钟最多发送20条算法
- 每分钟发送次数可通过启动参数进行更改
-Dmulti.dinger.minute.limit.count=10
- eg:
java -Dmulti.dinger.minute.limit.count=10 -jar service.jar
- 每分钟发送次数可通过启动参数进行更改
- RandomHandler: 随机选择算法
- RoundRobinHandler: 轮询算法
- 自定义算法
public class CustomAlgorithmHandler implements AlgorithmHandler {
@Override
public DingerConfig handler(List<DingerConfig> dingerConfigs, DingerConfig defaultDingerConfig) {
// 多机器人使用逻辑代码...
return dingerConfigs.get(1);
}
}