如何在部署中管理Laravel队列?

时间:2019-09-25 09:57:28

标签: php laravel redis

我有一个适用于Laravel的HA架构,具有多个Web和队列服务器以及零停机时间部署。它依靠Redis作为队列驱动程序。

问题在于,在部署集群的滚动更新时,部署新版本的代码时,无法阻止新队列工作者处理来自旧代码版本的作业。

Laravel中是否有一种方法可以过滤来自与队列工作人员不同的代码版本的作业?

1 个答案:

答案 0 :(得分:0)

即使我从未尝试过,也无法保证它能正常工作,但我仍然看到2种解决方案,因为我不会描述您可能遇到的所有技术问题。

在两种情况下,您都需要将代码版本存储在env / config中的某个位置,并在每个发行版中进行更新。

第一个解决方案

对于与该问题有关的所有作业,版本值必须是与作业本身一起分发的参数的一部分。

在作业句柄功能开始时,比较作业参数中的版本=工人环境中的版本。如果不是,该工作需要自己重新分配……它可能最终会由正确的工人“版本”来处理,或者您可以将其简单明了地丢弃。

第二个解决方案

在队列名称内动态包含版本代码。这样,每次发布时,都会有新的工作人员在听新的队列名称。这样,您就可以真正隔离有关工作和工人的版本。