Asynq异步任务队列实现
Asynq 是一个 Go 库,用于排队任务并通过 worker 异步处理它们。它由 Redis 提供支持,旨在实现可扩展且易于上手。
Asynq 工作原理的高级概述:
- 客户端将任务放入队列
- 服务器从队列中拉取任务并为每个任务启动一个工作协程
- 任务由多个 worker 同时处理
任务队列用作跨多台机器分配工作的机制。一个系统可以由多个工作服务器和代理组成,让位于高可用性和水平扩展。
示例用例
特性
- 保证至少执行一次任务
- 任务调度
- 失败任务的重试
- 工作人员崩溃时自动恢复任务
- 加权优先级队列
- 严格的优先队列
- 添加任务的延迟低,因为 Redis 中的写入速度很快
- 使用唯一选项对任务进行重复数据删除
- 允许每个任务超时和截止日期
- 允许聚合任务组以批处理多个连续操作
- 支持中间件的灵活处理程序接口
- 能够暂停队列以停止处理队列中的任务
- 定期任务
- 支持 Redis Cluster实现自动分片和高可用
- 支持 Redis Sentinels以实现高可用性
- 与Prometheus集成以收集和可视化队列指标
- 用于检查和远程控制队列和任务的Web UI
- CLI检查和远程控制队列和任务
稳定性和兼容性
状态:该库目前正在进行大量的开发工作,频繁的、破坏性的API变化。
重要提示:目前的主要版本是零(v0.x.x),以适应快速开发和快速迭代,同时获得用户的早期反馈(感谢对API的反馈!)。在v1.0.0版本发布之前,如果没有主要版本的更新,public API 可能会发生变化。
评论