lli*_*oor 7 php amazon-sqs laravel eloquent laravel-5
我在网上搜索,但没有找到任何解决我的问题的方法。我使用 Laravel 5.2 和 SQS 作为队列驱动程序。我正在调度一项作业,以便向 100 个用户发送电子邮件。该作业接收“文章”模型和“用户”数组,每个用户都应该收到一封包含“文章”的电子邮件。
当有 10 个用户时一切正常。当用户数为 100 时,我收到来自 amazon SQS 服务的错误消息“400 bad request”,响应为:“原因:消息必须短于 262144 字节。” 我知道由于用户的数组,该作业的请求太大。
我想拆分用户的数组,以便将作业的请求大小减少到 256kb 以下。我可以通过循环遍历用户的数组来完成此操作,每次达到接近 256kb 时,我都会分派包含文章和用户的作业,然后继续遍历数组中的其余用户。
提前非常感谢你利奥。
我找到了问题的解决方案。答案写在文档中:
由于作业正在使用 SerializesModels 特征,因此在处理作业时,Eloquent 模型将被优雅地序列化和反序列化。如果您的排队作业在其构造函数中接受 Eloquent 模型,则只有该模型的标识符才会被序列化到队列中。
这意味着 laravel 仅保存序列化雄辩模型的 id。这样我们就减少了调度作业的大小。另一方面,我仍然不知道如何在调度之前检查作业的大小。
编辑+解决方案:
基本上,最好的处理方法是派遣许多工作。我将用一个例子来解释。假设我们工作中有一个活动,我们想通知所有员工。处理它的最佳方法是使用 event->id 调度一个作业(排队),然后在该作业内循环工作人员并使用 $worker->id 调度许多作业(队列)。这样队列大小永远不会太大。如果我们为所有工人分派一项工作,以防我可以达到 1000 个 id(工人 id),这样我们将达到队列限制大小。
希望它是清楚的。利奥尔。
归档时间: |
|
查看次数: |
6653 次 |
最近记录: |