在作业中暂停队列
Pause Queue in a Job
我有以下问题需要解决:
多个用户可以通过 Web 界面将作业提交到队列。
然后,此作业通过数据库队列驱动程序存储在数据库中。
现在我的问题是:我希望队列 运行 所有作业,直到在作业中我说类似 $queue->pause() 的东西,因为对于 运行 的下一个作业我需要来自用户的一些确认。
我该如何做这样的事情?
- 运行 职位
- 在一个作业中,作业确定它需要用户的一些确认
- 暂停队列并将需要确认的作业保留在队列中
- 网站上的任何用户都可以按下按钮,然后删除此确认作业并重新开始排队。
我目前的 "solution" 没有用是这样的:
创建 2 种不同的工作类型:
- ImageProcessingJob
- UserNotificaitonJob
队列处理所有 ImageProcessingJob,直到它遇到 UserNotificationJob。
在 UserNotificationJob->handle() 中,我调用了 Artisan::call("queue:restart");这停止了队列。
此解决方案的问题是:UserNotificationJob 也被删除了。因此,如果我再次启动队列,队列将立即从剩余的 ImageProcessingJobs 开始,而无需等待实际确认。
我也对没有队列系统的其他架构解决方案持开放态度。
避免暂停队列的一种方法是在 SyncEvent 上设置 UserNotificationJob wait(当用户返回确认时设置 SyncEvent)。如果愿意,您可以让此等待超时,但随后您需要将作业重新发布到队列中。如果您决定超时并重新发布,您可以使用作业链来设置作业之间的依赖关系,这样在 UserNotificationJob 完成之前什么都不会 运行。
另一种方法可能是在用户发送确认之前简单地避免发布剩余的作业。
我有以下问题需要解决:
多个用户可以通过 Web 界面将作业提交到队列。 然后,此作业通过数据库队列驱动程序存储在数据库中。
现在我的问题是:我希望队列 运行 所有作业,直到在作业中我说类似 $queue->pause() 的东西,因为对于 运行 的下一个作业我需要来自用户的一些确认。
我该如何做这样的事情?
- 运行 职位
- 在一个作业中,作业确定它需要用户的一些确认
- 暂停队列并将需要确认的作业保留在队列中
- 网站上的任何用户都可以按下按钮,然后删除此确认作业并重新开始排队。
我目前的 "solution" 没有用是这样的: 创建 2 种不同的工作类型:
- ImageProcessingJob
- UserNotificaitonJob
队列处理所有 ImageProcessingJob,直到它遇到 UserNotificationJob。 在 UserNotificationJob->handle() 中,我调用了 Artisan::call("queue:restart");这停止了队列。 此解决方案的问题是:UserNotificationJob 也被删除了。因此,如果我再次启动队列,队列将立即从剩余的 ImageProcessingJobs 开始,而无需等待实际确认。
我也对没有队列系统的其他架构解决方案持开放态度。
避免暂停队列的一种方法是在 SyncEvent 上设置 UserNotificationJob wait(当用户返回确认时设置 SyncEvent)。如果愿意,您可以让此等待超时,但随后您需要将作业重新发布到队列中。如果您决定超时并重新发布,您可以使用作业链来设置作业之间的依赖关系,这样在 UserNotificationJob 完成之前什么都不会 运行。
另一种方法可能是在用户发送确认之前简单地避免发布剩余的作业。