什么是Asynq
Asynq
是一个go
语言实现的分布式任务队列和异步处理库,基于redis
,类似sidekiq
和celery
,他具有以下特点:
保证至少执行一次任务
持久化
失败重试
worker崩溃自动恢复
优先队列
暂停队列
支持中间件
允许唯一任务
支持Redis Cluster实现自动分片
支持Redis Sentinels实现高可用
提供web ui管理
提供cli管理
安装
go get -u github.com/hibiken/asynq
// 命令行工具:
go get -u github.com/hibiken/asynq/tools/asynq
使用
前提需要保证redis可用
main.go
Asynq服务端worker.go
处理程序asynq_test.go
模拟客户端使用
Asynq Server
package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"time"
"github.com/hibiken/asynq"
"golang.org/x/sys/unix"
)
func main() {
// asynq server
srv := asynq.NewServer(
asynq.RedisClientOpt{
Addr: ":6379",
Password: "Your password",
DB: 0,
},
asynq.Config{Concurrency: 20},
)
mux := asynq.NewServeMux()
// some middlewares
mux.Use(func(ne