asynq快速入门
看完快速入门就对asynq有个初步的了解(没看过,一定要看)。
集成
为什么使用asynq的几个原因
- 直接基于redis,一般项目都有redis,而asynq本身就是基于redis所以可以少维护一个中间件
- 支持消息队列、延迟队列、定时任务调度 , 因为希望项目支持定时任务而asynq直接就支持
- 有webui界面,每个任务都可以暂停、归档、通过ui界面查看成功失败、监控
在本教程中,我们将编写三个程序,client、server、scheduler。
- client将创建并安排由后台server异步处理的任务。
- server将启动多个并发工作线程来处理客户端创建的任务。
- Scheduler定期将任务排入队列,由后台server异步处理的任务。
目录&实现
server
参考looklook/app/mqueue/cmd/job目录
这里实现和快速开始里面基本上一样的,这里只是封装起来了而已。
scheduler
参考looklook/app/mqueue/cmd/scheduler目录
这里和上面server流程基本一样,就是类型是定时任务
client
参考looklook/app/order/rpc目录
client是要绑定在go-zero的api层或者RPC层的。所以目录结构就是api或者RPC的目录结构(通过goctl生成),这里RPC为例
asynqClient.go
asynq客户端实例化
//create asynq client.
func newAsynqClient(c config.Config) *asynq.Client {
return asynq.NewClient(asynq.RedisClientOpt{Addr: c.Redis.Host, Password: c.Redis.Pass})
}
实现步骤
- 配置config.yaml的Redis
- 资源依赖填充(ServiceContext)
- 业务层调用(logic)
总结
-
server:looklook/app/mqueue/cmd/job目录,消费任务
-
scheduler:looklook/app/mqueue/cmd/scheduler目录,定时生成任务
-
client:looklook/app/order/rpc目录,业务生成任务