很多业务请求并不需要在 HTTP 请求返回前完成全部工作。发送邮件、生成缩略图、同步第三方订单,这些操作可能很慢,也可能因为外部服务不稳定而失败。如果把它们直接放在请求处理函数里,用户要等待,服务也更容易在高峰期被拖垮。任务队列解决的正是这个问题:请求只负责登记一项工作,后台 Worker 稍后完成它。
本系列文章将会学习一个极简的 Go 异步任务队列 Asynq,本文先不急着钻进所有内部细节,而是用一个可以运行的例子认识 Asynq,再沿着这个例子看清 Client、Redis、Server 和 Handler 各自做了什么。