暂停作业中的队列

时间:2018-01-28 19:23:45

标签: laravel architecture queue lumen

我有以下问题要解决:

多个用户可以通过Web界面将作业提交到队列。 然后,通过数据库队列驱动程序将此作业存储在数据库中。

现在我的问题是:我希望队列运行所有作业,直到找到像$ queue-> pause()之类的作业,因为要运行下一个作业,我需要用户做一些确认。

我该怎么做?

  • 跑步
  • 在一项工作中,该工作确定需要用户进行一些确认
  • 暂停队列并保留需要队列确认的作业
  • 网站上的任何用户都可以按一个按钮,然后删除此确认作业并再次启动队列。

我目前无法解决的“解决方案”是: 创建2种不同的工作类型:

  • ImageProcessingJob
  • UserNotificaitonJob

队列处理所有ImageProcessingJobs,直到它遇到UserNotificationJob。 在UserNotificationJob-> handle()里面我调用了Artisan :: call(“queue:restart”);这阻止了队列。 此解决方案的问题是:UserNotificationJob也被删除。因此,如果我再次启动队列,队列将立即从Stillig ImageProcessingJobs开始,而无需等待实际确认。

我也对没有Queue系统的其他架构解决方案持开放态度。

1 个答案:

答案 0 :(得分:1)

避免暂停队列的一种方法是在SyncEvent上使用UserNotificationJob wait(当用户确认回来时设置SyncEvent)。如果您愿意,可以将此等待超时,但是您需要将作业重新发布到队列中。如果您决定超时并重新发布,则可以使用作业链来设置作业之间的依赖关系,以便在UserNotificationJob竞争之前不能运行任何内容。

另一种方法可能是在用户发送确认之前简单地避免发布剩余的工作。