大纲(未完成)
基于golang+emqtt+rabbitmq实现简易的延时任务中间件
常见的延时任务需要的场景还是蛮多的, 经典的30分钟未付款订单定时取消等等
我选择mqtt主要是因为当前业务中已经有mqtt,相对来说mqtt比http任务建立的方式更适合分布式场景,不需要去请求固定的域名。
实现逻辑
- 接收mqtt定时任务消息
- 接收到消息之后将消息加入到rabbitmq中
- 读取rabbitmq队列中的任务
- 创建一个相对应的过期时间的死信队列,并且将消息投递到其中
- 接受rabbitmq中专门接收死信队列中到期的任务
- 回调任务
- 其余需要处理的内容
- 使用supervisor部署
- 接收的内容格式错误或者无法解析
- 回调的时候错误处理
- 日志处理
参考内容
- amqp文档
- emqtt文档