Php AWS SQS上的Laravel队列工作者-大量请求?

Php AWS SQS上的Laravel队列工作者-大量请求?,php,laravel,amazon-sqs,laravel-queue,Php,Laravel,Amazon Sqs,Laravel Queue,我有两个Amazon SQS队列,由两名工作人员监控。我用它来发送电子邮件,发送一些员工请求。典型的后端产品。这个月大概有100份工作 然而,我从亚马逊收到电子邮件,我已经在887457亚马逊简单队列服务的免费1000000层请求请求 我想知道我是怎么得到这个号码的?工作人员是否轮询被视为请求的队列?如果是的话,我们可以增加这个间隔吗 队列工作人员有一个--sleep选项: php artisan queue:work --help 默认值为3秒,因此每3秒您的每个工作人员都会发出一个请求。有

我有两个Amazon SQS队列,由两名工作人员监控。我用它来发送电子邮件,发送一些员工请求。典型的后端产品。这个月大概有100份工作

然而,我从亚马逊收到电子邮件,我已经在887457亚马逊简单队列服务的免费1000000层请求请求

我想知道我是怎么得到这个号码的?工作人员是否轮询被视为请求的队列?如果是的话,我们可以增加这个间隔吗

队列工作人员有一个--sleep选项:

php artisan queue:work --help

默认值为3秒,因此每3秒您的每个工作人员都会发出一个请求。有2名员工,每天57600个请求。如果您开始此操作已经有大约2周了,那么将有大约800k个请求。

此外,我认为amazon SQS消息中存在类似最大消息大小的内容。它们处理较大消息的方式是,将一条消息计为多个请求。不久前,这就是我达到自由层限制的原因。大消息的一个例子是作业,其构造函数中有大对象(雄辩的模型)。这些对象似乎是序列化的,这就是消息如此巨大的原因


解决方案是只为作业的构造函数提供简单的数据类型(例如,用户id而不是用户对象),然后在作业的handle方法中获取整个对象。

如果有消息,您可能希望立即响应,同时在没有消息时减少对SQS的请求数量。正确的配置称为“长轮询”。这是通过在ReceiveMessage调用或默认情况下为队列将ReceiveMessage等待时间设置为20秒来完成的。由于Laravel没有向队列调用传递参数的选项,因此必须在队列选项中执行此操作


这意味着,如果队列中没有消息,SQS最多在20秒内不会响应。也就是说,如果仍然没有消息,则为20秒,如果有消息进入队列,则为更短的时间。这将大大减少您的SQS请求20倍,加上实际有作业要处理的请求

谢谢!我注意到两个工人都睡了1秒钟,所以现在自由层用完是有道理的!