TasQ is a lightweight asynchronous task queue by Golang
golang异步任务队列设计文档/实现提纲 需求/目标
- 超轻量级
- 超长任务的管理控制
- 多消费者和多生产者
- 任务回调机制
- 调度机制:抢占式调度和优先级
- 支持多种broker,方便插拔
- 重试机制,自定义参数进行重试
- 任务记时
- 可自定义配置文件,例如重试次数,重试时间,消费者生产者个数,任务处理快慢,任务最大上限。。。
- 应该提供出抽象接口进行解耦,防止侵入太深
- 持久化任务运行结果,日志系统
- 支持多种序列化方案进行序列化
- 并发安全/高并发
- 分布式
- 其他定制化
调研: 目前流行的golang异步任务队列:
设计: 异步任务队列的流程: 生产者发布任务 —— broker —— 消费者竞争任务,进行消费 —— 确认消费成功,保存结果/消费失败, 重新执行任务(重新发送任务还是同一个任务进行重复执行?
实现细节: broker应当是一个接口,任何实现broker接口的可以:
// 草稿 目前支持: redis: redis-cluster集群版,redis单机版
mongo: mongo-driver
mysql:
主流消息队列: dd