Amazon SQS“接收计数”只会增加

Posted

技术标签:

【中文标题】Amazon SQS“接收计数”只会增加【英文标题】:Amazon SQS "Receive Count" only increasing 【发布时间】:2018-09-14 12:06:22 【问题描述】:

我是 Amazon SQS 的新手,但目前有些数字令人震惊。

我已将 Laravel 配置为对我的站点使用 Amazon SQS 发送的电子邮件消息进行排队(不使用作业,而只是通过扩展通知类 as per the documentation)。服务本身似乎运行良好。所有消息都出现在我的 AWS 账户的 SQS 队列中,但问题是队列似乎很大。

我找不到任何体面的教程或指南来解释如何阅读用简单英语编写的 SQS 屏幕,所以一切可能都很好。也就是说,我想确定一下。

考虑一下 SQS 当前所说的内容:

可用消息:300 飞行中的消息:4 消息延迟:0

当我在它首次上线时对其进行测试时,电子邮件会立即发送。 “可用消息”是空的,并且电子邮件到达我的收件箱没有问题。

如您所见,今天这个数字要高得多,而且似乎从未完全达到 0。除此之外,电子邮件还需要几个小时才能到达。

这正常吗?

我已经通过 SSH 连接到我的 Elastic Beanstalk 实例并环顾四周。我手动添加了五个运行php artisan queue:work 的后台进程,每个进程消耗约5% 的CPU。嗯。

如果我手动运行相同的命令(没有nohup),我会看到一个不断更新的列表:

[2018-04-04 20:09:59] 处理:App\Notifications\CompetitionAll [2018-04-04 20:09:59] 处理:App\Notifications\CompetitionVIP [2018-04-04 20:10:00] 处理:App\Notifications\CompetitionVIP [2018-04-04 20:10:00] 处理:App\Notifications\CompetitionVIP [2018-04-04 20:10:00] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:00] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:00] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:02] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:03] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:03] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:03] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:03] 处理:App\Notifications\CompetitionAll [2018-04-04 20:10:03] 处理:App\Notifications\CompetitionAll

只有每隔一段时间才会对 Processed 进行一次更改,大多数时候它是一个无穷无尽的黄色处理列表,每秒都在变化。

当我在 SQS 中查看消息时,我看到非常高的“接收计数”。有些高达21,000+

我知道总共可能只有大约 2000 个电子邮件请求,所以我不明白这个数字怎么会这么高。

这正常吗? Laravel 似乎没有删除已完成的请求。 (此外,似乎几乎不可能找到这些数字的解释......!)

任何帮助了解正在发生的事情将不胜感激!

【问题讨论】:

您可以发布您的.env 文件和工作文件吗?看起来邮件已排队,但作业未正确分派。 接收计数非常高。这通常代表处理过程中的一些错误,因此消息只是回到队列中。消息可见性超时也可能远低于处理消息所需的时间 @parthu_panther .env 文件显然是正确的,因为消息出现在 SQS 中。我没有工作文件,我只是使用通知类,根据文档:laravel.com/docs/5.5/notifications#queueing-notifications 相关:***.com/questions/39519581/… 【参考方案1】:

呃。看来问题只是一个愚蠢的问题:

我们的电子邮件递送提供商达到了每日限制。

一旦我们增加了限制,队列会在几分钟内清空。

我将把这个问题留在这里,以防它对其他人有所帮助。

【讨论】:

不错的答案,让我崩溃了 您好,感谢您回答这个问题。你能把事情弄清楚吗?接收计数是队列获得完全相同的消息有效负载的次数吗?这是否意味着在您的情况下,这条消息可能失败了 21,426 次? @Stewart,这意味着消息被客户端“接收”,变为“不可见”,然后可见性超时到期,再次使消息可用的次数。

以上是关于Amazon SQS“接收计数”只会增加的主要内容,如果未能解决你的问题,请参考以下文章

AWS SQS:当消费者发生错误时移动到死信队列

Amazon SQS 死信队列:真的是死信还是毒药?

Amazon MQ 和 SQS 有啥区别?

SimpleMessageListenerContainer Amazon SQS Pollinterval

Amazon SQS/SNS 策略错误

如何将Amazon SQS与Dynamodb集成