【问题标题】:Queues: How to process dependent jobs队列:如何处理相关作业
【发布时间】:2018-01-20 17:19:24
【问题描述】:

我正在开发一个应用程序,其中多个客户端将写入一个(或多个队列),并且多个工作人员将处理队列外的作业。问题是在某些情况下,工作是相互依赖的。我所说的“依赖”是指它们需要按顺序处理。

这通常发生在用户创建实体并在不久后删除时。显然,我希望在删除之前进行第一份工作(即创建)。问题是创建可能比删除需要更长的时间,所以我不能保证在删除作业开始之前它会完成。

我想这种类型的问题在异步处理中相当普遍。有哪些应对策略?我知道我可以为队列分配优先级以对处理顺序进行一些控制,但在这种情况下这还不够好。我需要具体的保证。

【问题讨论】:

    标签: queue priority-queue


    【解决方案1】:

    这可能不适合您的模型,但我使用的模型涉及在创建功能完成之前不提供删除功能。

    当 Create_XXX 命令完成时,它负责引发一个 XXX_Created 事件,该事件也被放入队列中。然后可以处理此事件以启用删除功能,从而允许删除新创建的项目。

    一个命令完成的过程,然后引发一个事件,该事件被处理并创建另一个命令是确保命令按所需顺序处理的常用方法。

    【讨论】:

      【解决方案2】:

      我认为你的用例的一个方便的功能是作业链接:

      https://laravel.com/docs/5.5/queues#job-chaining

      【讨论】:

        猜你喜欢
        • 2015-05-05
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 2015-10-09
        • 1970-01-01
        • 2011-08-30
        相关资源
        最近更新 更多