大纲(未完成)
基于golang+emqtt+rabbitmq实现简易的延时任务中间件

常见的延时任务需要的场景还是蛮多的, 经典的30分钟未付款订单定时取消等等
我选择mqtt主要是因为当前业务中已经有mqtt,相对来说mqtt比http任务建立的方式更适合分布式场景,不需要去请求固定的域名。

实现逻辑

  1. 接收mqtt定时任务消息
  2. 接收到消息之后将消息加入到rabbitmq中
  3. 读取rabbitmq队列中的任务
  4. 创建一个相对应的过期时间的死信队列,并且将消息投递到其中
  5. 接受rabbitmq中专门接收死信队列中到期的任务
  6. 回调任务
  7. 其余需要处理的内容
    • 使用supervisor部署
    • 接收的内容格式错误或者无法解析
    • 回调的时候错误处理
    • 日志处理

参考内容

  • amqp文档
  • emqtt文档