go-zero集成asynq

asynq快速入门

官网https://github.com/hibiken/asynq/wiki/Getting-Started

看完快速入门就对asynq有个初步的了解(没看过,一定要看)。

集成

为什么使用asynq的几个原因

  • 直接基于redis,一般项目都有redis,而asynq本身就是基于redis所以可以少维护一个中间件
  • 支持消息队列、延迟队列、定时任务调度 , 因为希望项目支持定时任务而asynq直接就支持
  • 有webui界面,每个任务都可以暂停、归档、通过ui界面查看成功失败、监控

在本教程中,我们将编写三个程序,client、server、scheduler。

  • client将创建并安排由后台server异步处理的任务。
  • server将启动多个并发工作线程来处理客户端创建的任务。
  • Scheduler定期将任务排入队列,由后台server异步处理的任务。

目录&实现

参考https://github.com/Mikaelemmmm/go-zero-looklook

server

参考looklook/app/mqueue/cmd/job目录
go-zero集成asynq_第1张图片

这里实现和快速开始里面基本上一样的,这里只是封装起来了而已。
go-zero集成asynq_第2张图片

scheduler

参考looklook/app/mqueue/cmd/scheduler目录
go-zero集成asynq_第3张图片

这里和上面server流程基本一样,就是类型是定时任务
go-zero集成asynq_第4张图片

client

参考looklook/app/order/rpc目录
client是要绑定在go-zero的api层或者RPC层的。所以目录结构就是api或者RPC的目录结构(通过goctl生成),这里RPC为例
go-zero集成asynq_第5张图片

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)

go-zero集成asynq_第6张图片

总结

  • server:looklook/app/mqueue/cmd/job目录,消费任务
  • scheduler:looklook/app/mqueue/cmd/scheduler目录,定时生成任务
  • client:looklook/app/order/rpc目录,业务生成任务

你可能感兴趣的:(后端)