首页 > 解决方案 > Laravel Queue:多队列、多任务、多远程服务器

问题描述

我正在开发一个应用程序,它在几 (10) 个服务器(s1 到 s0)上运行远程任务(任务 A 和任务 B),一旦部件完成,任务 C 就会在本地服务器上运行。所有这些任务可能需要一段时间才能完成(从一分钟到一小时),但任务 A 的时间是任务 B 的 4 到 20 倍(每次运行都可能发生变化)。

我不希望一次在任何服务器上运行多个任务。我正在努力提高它的工作效率,所以我认为 laravel8 的 Queue 可以达到我的目的。我的想法是我说 5 个队列 q1、q2、q3、q4、q5 然后我为前 3 台服务器的队列 1 到 3 添加任务 A,为 s4 和 s5 添加任务 B,然后我将为所有任务重复。在此之后我的队列看起来像这样

q1    q2    q3    q4    q5
s1ta  s2ta  s3ta  s4tb  s5tb
s6ta  s7ta  s8ta  s9tb  s0tb
s1tb  s2tb  s3tb  s4ta  s4ta
s6tb  s7tb  s8tb  s9ta  s0ta
--tc

虽然这看起来不错,但如果 q1 到达任务 C 但其他队列正在运行怎么办?当所有队列都为空时,有没有办法可以触发任务 C?有一个更好的方法吗?我应该为此使用除队列之外的其他东西吗?如果是的话怎么办?队列中的作业完成时是否触发事件?

我等待您的想法和建议。

谢谢

克雷格

*** 编辑 *** 对此进行更多思考,将任务 a 和任务 b 在同一个队列上依次运行是有意义的,因此:

q1    q2    q3    q4    q5
s1ta  s2ta  s3ta  s4ta  s5ta
s1tb  s2tb  s3tb  s4tb  s5tb
s6ta  s7ta  s8ta  s9ta  s0ta
s6tb  s7tb  s8tb  s9tb  s0tb
--tc

但是任务 C 的问题仍然存在,如果任务尚未开始,如果它可以移动到一个空队列,那就太好了。现在我不知道从哪里开始......

标签: laravelqueue

解决方案


推荐阅读