Repolode
hibiken

hibiken/asynq

基于 Redis 的 Go 分布式任务队列库,支持定时任务、失败重试和优先级队列。

Star
13,784
Fork
991
未关闭 Issue
293
最近提交
3天前

这是什么?

Asynq 是一个 Go 语言库,用于将任务放入队列,并由 worker 协程异步处理。客户端把任务写入 Redis,一个或多个 worker 服务器从队列中取出任务并发执行,可以把工作负载分布到多台机器上。

它覆盖了后台任务的常见需求:定时任务与周期任务、失败任务重试、worker 崩溃后的任务恢复、加权和严格优先级队列、通过 unique 选项去重、单任务超时与截止时间,以及把多个任务聚合成批次处理。Handler 既可以是普通函数,也可以是实现接口的类型,并支持中间件。

运维方面,它提供 Prometheus 指标集成和 Redis Sentinel 高可用支持,并配有独立的 Asynqmon 网页界面和名为 asynq 的命令行工具,用于查看和管理队列与任务。需要 Redis 4.0 或更高版本,部分 Lua 脚本可能不兼容 Redis Cluster。

核心功能

  • 01支持定时、周期和延迟执行任务
  • 02失败任务自动重试,worker 崩溃后可恢复任务
  • 03支持加权和严格两种优先级队列
  • 04支持任务去重、超时与截止时间设置
  • 05支持将多个任务聚合成批次处理
  • 06提供 Prometheus 指标、Redis Sentinel 支持、网页界面和命令行工具

适用场景

  • 在后台发送邮件或通知,避免阻塞 HTTP 请求
  • 在独立的 worker 机器上处理图片缩放或上传文件
  • 在 Go 服务中运行清理、生成报表等周期性任务
  • 以 Redis 作为消息中间件,把繁重任务分散到多台服务器

快速上手

  1. 1

    安装 Go,并确保 Redis 服务器(4.0 或更高版本)正在运行

  2. 2

    在你的 Go 模块中安装 Asynq 库

    go get -u github.com/hibiken/asynq
  3. 3

    编写任务包,用 Client 入队任务,并用 Server 处理任务

使用前须知

  • 需要 Redis 服务器(4.0 或更高版本)来存储和传递任务。
  • 当前为 v0.x 版本,在 v1.0.0 发布前公共 API 可能在没有主版本号升级的情况下变化。
  • 部分 Lua 脚本可能与 Redis Cluster 不兼容。

标签

常见问题

asynq 是什么?
基于 Redis 的 Go 分布式任务队列库,支持定时任务、失败重试和优先级队列。 Asynq 是一个 Go 语言库,用于将任务放入队列,并由 worker 协程异步处理。客户端把任务写入 Redis,一个或多个 worker 服务器从队列中取出任务并发执行,可以把工作负载分布到多台机器上。
asynq 可以免费使用吗?用的什么许可证?
asynq 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
asynq 还在维护吗?
活跃维护中。asynq 最近一次提交是在 2026年10月19日。
asynq 适合用来做什么?
在后台发送邮件或通知,避免阻塞 HTTP 请求 在独立的 worker 机器上处理图片缩放或上传文件 在 Go 服务中运行清理、生成报表等周期性任务 以 Redis 作为消息中间件,把繁重任务分散到多台服务器
asynq 怎么安装和运行?
安装 Go,并确保 Redis 服务器(4.0 或更高版本)正在运行 在你的 Go 模块中安装 Asynq 库: go get -u github.com/hibiken/asynq 编写任务包,用 Client 入队任务,并用 Server 处理任务
在哪里获取 asynq?
源代码和安装说明在 GitHub 上:https://github.com/hibiken/asynq

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目