Skip to content

Dinger 2.4 多机器人配置

Jaemon edited this page Jul 18, 2021 · 5 revisions

多机器人配置

由于钉钉企业微信有消息发送频率限制-每个机器人每分钟最多发送20条,这种限制可能导致消息发送失败的问题,而多机器人配置就是为了解决这种情况的。

目前Dinger提供两种方式多机器人配置支持,大家可以根据实际情况选择合适的配置方式,相对于全局配置方式,Dinger级别是更细粒度的配置方式。

 

一、全局开启多机器人配置

1. 启用多机器人配置功能

@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);
    }
}

2. 配置机器人信息及多机器人使用算法

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对象

 

二、Dinger级别开启多机器人配置

1. 启用多机器人配置功能

@SpringBootApplication
@DingerScan(basePackages = "com.jaemon.demo.dinger")
// 启用多机器人配置功能
@EnableMultiDinger
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2. Dinger层配置

// 为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中不一致会致使多机器配置失效而选择默认配置发送

 

三、系统默认四种AlgorithmHandler算法

  • 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);
    }
}
Clone this wiki locally