我如何知道 SQS 是否有新消息?

How can I know if SQS has a new message?

我正在编写一个使用 lambda 函数的应用程序,该函数将请求发送到将调用其他服务的 spring 引导应用程序。我必须使用 sqs(必需)。所以 sqs 介于 lambda 和 spring 之间。问题是我的 spring 应用程序如何知道 sqs 中是否有新消息。

  1. 听说过long pooling,但不知道是不是我需要的

  2. 我需要设置一个永远打开长池的循环吗?

  3. 效率高吗?我的意思是如果sqs里面有10条消息,连接会打开十次?

我还发现在这里使用 while 循环:Check for an incoming message in aws sqs

谢谢

您链接的答案是准确的。

您必须编写一个程序来轮询 SQS 以获取一条消息(或最多 10 条消息)。使用长轮询更有效,因为您需要更少的调用。

如果您想很快了解一条消息,那么您将需要不断地轮询。也就是说,一旦它返回并显示 "nothing to receive",您就应该再次调用它。要降低这些调用的频率,您可以设置 long polling,最多 20 秒。这意味着,如果队列中没有消息,ReceiveMessages() 选项将在 returns 响应 "no messages" 之前花费 20 秒。但是,如果消息在此期间到达,它将立即响应。发出 ReceiveMessages() 请求时指定了长轮询选项。

如果您不需要即时通知,您的应用程序可以不那么频繁地调用(例如每分钟或每隔几分钟)。这将减少对 Amazon SQS 的调用。

进行 ReceiveMessages() 调用时,您的应用程序可以请求 最多 10 条消息。这意味着可能会返回多条消息。

一旦您的应用程序处理完一条消息,它必须调用 DeleteMessage() 以将该消息从队列中删除。这是一个故障安全装置,如果应用程序出现问题并且消息没有得到正确处理,它会自动将消息放回队列中。

这是来自 AWS re:Invent 会议的精彩视频,详细解释了 Amazon SQS(和 Amazon SNS):AWS re:Invent SVC 105: AWS Messaging