博文

Asynq实现Go异步crontab定时任务

图片
  最近在用Go写运维平台, 需要在Go应用程序中非同步处理任务, go cron并不能满足我的需求,于是在github发现了Asynq库。 让我们来动手实验asynq的用法吧! Asynq是一个Go库,用于将任务排队并与工作者异步处理它们。它由Redis支持,设计成可扩展且易于上手。 任务队列被用作跨多台机器分配工作的机制。 一个系统可以由多个工作服务器和代理组成,从而实现高可用性和水平扩展。   Highlevel overview of how Asynq works: Client puts task on a queue Server pulls task off queues and starts a worker goroutine for each task Tasks are processed concurrently by multiple workers   快速开始 首先,确保你在本地运行Redis服务器。 $ redis - server   安装Asynq库 go get - u github . com / hibiken / asynq go get - u github . com / hibiken / asynq / tools / asynqmon   创建项目 mkdir ziji && cd ziji go mod init ziji mkdir tasks touch tasks / beta . go tasks / worker . go tasks / task . go   Redis 连接选项 Asynq 使用 Redis 作为消息代理, beta . go 和 worker . go 都需要连接到 Redis 进行写入和读取。 我们将使用 RedisClientOpt 指定如何连接到本地 Redis 实例。 beta.go package tasks import ( "github.com/hibiken/asynq" "log" "pigs/common" "pigs/models/cmdb" ) func TaskBeta () { ...