如何在任何时间点获取前10个SQS消息后获取下10个SQS消息

时间:2016-10-04 20:45:52

标签: amazon-web-services amazon-sqs aws-java-sdk

我正在尝试为QA团队开发一个UI,他们可以在不登录AWS的情况下检查队列消息。

为了使这个UI更便宜,我只显示前10个队列消息,现在如果QA人员想要在分析队列masseges后获取更多记录,那该怎么办呢。

如何在不使用可见性超时选项的情况下从队列中提取下10条消息?

3 个答案:

答案 0 :(得分:2)

听起来您可能希望同时将SQS消息临时写入数据库,并让QA团队在数据库中查看消息。 SQS没有分页或“下一个10”的概念 - 当您从队列中读取消息时,您应该处理并删除它们 - 然后要求更多。浏览数据库记录可能更适合QA目的。

答案 1 :(得分:1)

您必须删除前10条消息,否则将继续返回。甚至可能会返回已删除的邮件,因此系统能够处理重复邮件非常重要。

答案 2 :(得分:1)

如果您想要更多消息,只需向SQS询问更多消息。

SQS知道某人已经获得了前10名,但它不知道是你。如果你要求更多,你会得到更多。

直到可见性计时器 - 默认为30秒 - 对您收到的邮件到期,您可以反复询问,询问并询问,您将不会再看到相同的邮件。消息是“在飞行中” - 意味着SQS正在等待某人删除它们,修改其可见性或计时器到期。一旦计时器到期,你将再次开始看到它们。

每个SQS队列最多可以提取120,000条消息,而不会发生确认,删除或可见性更改。祝你好运。

  

我无法在产品投入生产时使用可见性超时,我的工具不应阻止实际服务消耗队列消息

我不确定这意味着什么。如果你说你的队列的默认可见性超时为0,那么真正的问题是你开始时做错了。如果您有多个消费者,则默认可见性超时为0将导致重复的消息传递。

查看visibility timeout的文档。可见性超时是允许使用者在不删除消息或更改其可见性超时之前保留消息的时间,然后将其传递给另一个消费者。它不会延迟尚未使用的消息的可用性,也不会延迟已消耗且已超时或已重置的消息的可用性。

如果要在不阻止应用程序的情况下检查消息,请从队列中获取消息,根据需要发送尽可能多的请求(发出多个请求,如果超过10个),然后立即发送API请求以设置可见性这些消息的超时为0。这将立即释放它们以供应用程序再次使用(或者通过此工具,如果应用程序被积压,当然)。

替代方案:对于用于分析队列消息的真正独立路径,我使用不同的方法:SNS扇出。

我将它们发送到SNS主题,而不是消息生产者直接向SQS发送消息。主队列和辅助队列都是此主题的订户。应用程序从主队列中消耗,而辅助队列只是在那里收集每个消息的第二个副本。当邮件从辅助队列到期时,它们就会消失(默认= 4天)。这为我提供了一个非常有用的工具,用于故障排除以及处理应用程序使用者中任何导致不正确的消息处理的灾难性事件,其中从SQS收到的消息随后因意外或未处理的条件而丢失。