我怎么知道SQS是否有新消息?

时间:2019-07-05 23:37:20

标签: amazon-web-services amazon-sqs

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

  1. 我听说过长池化,但是我不知道这是否是我需要的。

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

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

我也在下面找到了while循环:Check for an incoming message in aws sqs

谢谢

1 个答案:

答案 0 :(得分:1)

您链接的答案是准确的。

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

如果您希望很快了解消息,则需要不断进行轮询。也就是说,一旦返回并说“什么也没收到”,您应该再次调用它。要减少这些呼叫的频率,您可以设置长时间轮询,最长不超过20秒。这意味着,如果队列中没有消息,则ReceiveMessages()选项将花费20秒才能返回“无消息”响应。但是,如果同时有一条消息到达,它将立即响应。提出ReceiveMessages()请求时,指定了长轮询选项。

如果您不需要即时通知,则您的应用程序调用的频率可能会降低(例如,每分钟或每几分钟)。这将减少对Amazon SQS的调用。

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

应用程序完成消息处理后,必须调用DeleteMessage()才能从队列中删除消息。这是一种故障保护,如果应用程序出现问题并且未正确处理消息,则会自动将消息重新放入队列。

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