/ding-robot

钉钉机器人工具包(消息必达)

Primary LanguageJavaApache License 2.0Apache-2.0

ding-robot

Features

ding-robot是一个基于钉钉开放接口开发的预警开发库,其特点是消息必达。

  • 开箱即用,简单配置钉钉机器人基本参数皆可使用
  • 采用限流器避免消息发送过于频繁,机器人被禁言丢失重要告警信息(关于调用频率
  • 提供了基于内存的单机限流算法和基于Redis的分布式限流算法
  • 高度容错,ding-robot框架的任何异常都不会影响业务接口
  • 失败消息持久化,定时重试失败消息,确保消息正确预警
  • 失败重试消息不抢占正常消息发送资源,确保正常消息优先级

Prerequisite

ding-robot需要java8及以上版本

ding-robot基于spring-boot框架运行

Building

git clone https://github.com/xpp011/ding-robot.git

cd ding-robot

mvn clean install -Dmaven.test.skip=true

Quickstart

依赖

基于内存限流的单机版只需引用

<dependency>
    <groupId>cn.xpp011</groupId>
    <artifactId>ding-robot</artifactId>
    <version>${latest-version}</version>
</dependency>

基于Redis的分布式限流还需引用redis

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置信息

配置redis信息

spring:
  redis:
    host: 
    password: 

配置机器人地址

warn:
  ding-robot:
    instance:
      test:
        webhook: https://oapi.dingtalk.com/robot/send?access_token=113ec2c6a446e9d6d8e723ce39aa6949cae5ed7aae66bbdc839e1389ea0d5562
        secret: SEC5014b30034fab4beef7595f066c2aedd610a1ba9ae998f4dd56492aa9b6ebc54

发送消息

@Autowired
private DingRobotFactory dingRobotFactory;

public void testSendTextMessage() {
        At at=new At.Builder()
                .setAtMobiles(Arrays.asList("phone"))
                .setAtAll(false)
                .builder();
        Message text=new TextMessage.Builder()
                .setContent("测试消息")
                .setAt(at)
                .builder();
        boolean test=dingRobotFactory.getDingRobot("test").send(text);
}

更多消息类型构造可查看测试代码

Documentation

关于限流算法

对于需求一分钟内最多发送20条消息,超过20条则会被禁言十分钟,在常规的限流算法中,只有滑动窗口,令牌桶,漏桶可以满足这个需求,固定窗口的限流策略过于粗略,会出现临界时间的突发流量,故不采用固定窗口

滑动窗口能够确保在时间窗口中不会出现>n的流量,且实现简单,是最合适预警服务的限流算法,所以ding-robot采用的就是基于滑动窗口的限流算法。

令牌桶,漏桶的限流算法在流量整形效果更加好,在时间颗粒度上处理的很平滑,能够确保流量曲线是很平滑的,但是它们并不适合预警服务,预警服务往往是需要应付突发流量的,不需要对流量整形效果有多好,只需满足在时间窗口内不会超过最大允许的限流值即可。

Roadmap

功能 优先级 进度
简化依赖包 p1 完成
支持actionCard、feedCard的消息类型 p1 完成
完善测试报告 p1 未开发
支持更多的限流算法 p2 未开发
整合各种预警方式(企业微信、短信、邮件) p1 未开发