2017-07-29 38 views
1

我有一个专用API的Lumen设置。 Laravel在内部向Lumen发出API请求,然后Lumen将排队工作(Amazon SQS)。通过Lumen队列回到Laravel?

当队列作业完成或失败时,您将如何回复Laravel?如果队列工作人员由于某种原因无法与Laravel应用程序进行通信,则需要稍后以某种方式再次尝试。

我附上了系统架构图。你可以看到我的问题是关于红色虚线。

enter image description here

回答

1

首先创建一个新的工作称为NotifyLaravel您所需要的任何PARAMATERS(作业ID,任务ID,用户ID等)。

一旦您的作业在队列中完成,您可以在dispatch(new NotifyLaravel($jobId))完成后立即完成。

这份工作(双关语)的工作是简单地ping Laravel表明队列已经完成了这个特定的工作。我不会给出一个示例实现,但基本上可以在Lumen和Laravel之间创建一个共享密钥,以“验证”请求。然后Lumen只需发送工作ID或用于追踪它们的标识符。

如果您的Laravel实例处于脱机状态,您可以简单地引发异常。队列工作人员将稍后重试。后者在文档(https://laravel.com/docs/5.4/queues#job-expirations-and-timeouts)中解释。

+0

@Feilx谢谢你的回答,我曾考虑过这个问题。你对使用pusher.com有什么看法? –

+1

@ I'll-Be-Back Pusher点com用于通过WebSocket,iOS推送功能和Google Push功能实时通知客户。这并不意味着你目前的用例。你可以做的最优化的事情是我在我的回答中写的,你的Lumen API将JSON有效载荷发送到Laravel上的专用端点。 –

+1

也只是为了指定;您正在创建的作业('NotifyLaravel')将在流明侧创建 –