我正在编写一个使用lambda函数的应用程序,该函数将请求发送到Spring Boot应用程序,该应用程序将调用其他服务。我必须使用sqs(必填)。所以平方介于lambda和spring之间。问题是我的spring应用程序如何知道sqs中是否有新消息。
我听说过长池化,但是我不知道这是否是我需要的。
我需要设置一个循环来永久打开长池吗?
效率高吗?我的意思是如果sqs中有10条消息,连接将被打开十次?
我也在下面找到了while循环:Check for an incoming message in aws sqs
谢谢
答案 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