【发布时间】:2016-08-15 22:09:07
【问题描述】:
如何在课堂中在 ShouldQueue 和 Sync 之间切换?
我们有一个端点,它接受一个参数是应该立即触发还是稍后触发。
在这两种情况下都应该执行相同的逻辑,但在一种情况下,我期望并回复,而另一种情况应该异步处理。
我知道实现“ShouldQueue”并使用“InteractsWithQueue”-Trait,但我们如何在一种情况下使用它而不在另一种情况下使用它?
您能否以编程方式设置请求是否应排队,或者是否有更好的方法来执行此操作?谢谢
【问题讨论】:
-
我自己还没有测试过这个,但是你可以实例化作业类,如果它必须立即运行,或者“在线”,那么只需在你的控制器中调用
handle()方法吗?如果你想在队列中运行它,或者“离线”,你可以像往常一样使用调度程序来排队。 -
@xjstrategebx 是的,这行得通,但是在这两种情况下如何传递变量?在 dispatch 情况下,它应该在构造函数中,在 handle 情况下,handle 方法。
-
如果您通过服务容器解析作业类(即
$job = app(\App\Jobs\MyJob::class);),您在构造函数中键入提示的任何类都将自动为您传递。如果你手动调用handle(),并且它需要你传递参数,那么你调用它时只需传递参数。排队时无需担心这些参数 - 我相信服务容器在从队列中运行时会自动注入参数。 -
@xjstrategebx - 感谢您的努力。 Joseph Silber 有一个更好的解决方案。但是那个也应该工作。
-
没问题,他的解决方法我也知道就好!