2016-10-04 70 views
1

我正在尝试为QA团队开发一个用户界面,他们可以在没有登录AWS的情况下检查队列消息。如何在任何时间点提取前10个SQS验证后获取下一个10 SQS消息

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

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

回答

1

你将不得不删除前10条消息,否则他们将继续返回。甚至可能会返回已删除的消息,因此重要的是您的系统能够处理重复的消息。

2

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

+0

雅,这是一个好主意。我用“10个消息”的任何方式,因为最大批量大小messesge从队列中取为10 ...谢谢E.J – ifti

1

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

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

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

每个SQS队列最多允许提取120,000条消息,而无需进行确认,删除或可视性更改。祝你好运达到了极限。


我不能使用可视性超时的产品在生产,我的工具,不应该从消费队列封邮件

阻止实际的服务,我不知道到底是什么意思。如果您在说您的队列的默认可见性超时时间为0,那么真正的问题在于您开始时做错了。如果您有多个消费者,则默认可见性超时值为0将导致重复消息传递。

查看visibility timeout的文档。可见性超时是允许消费者保留消息多长时间,而不删除消息或将其可见性超时更改为,然后将消息发送给其他消费者。它不会延迟尚未使用的消息的可用性,也不会延迟已使用且已超时或已重置的消息的可用性。

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


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

而不是消息生产者直接发送消息到SQS,我将它们发送到一个SNS主题。主要队列和辅助队列都是此主题的订阅者。应用程序从主队列中消耗,而次要队列就在那里收集每个消息的第二个副本。当消息从辅助队列过期时,它们就会消失(默认= 4天)。这让我对故障诊断,以及处理任何应用程序中的消费导致不正确的消息处理,其中接收的消息从SQS随后失去了由于意外或未经处理的条件灾难性的一个非常有用的工具。

+0

迈克尔感谢您的回答。但我不能使用可见性超时,因为产品在生产中,我的工具不应该阻止消耗队列消息的实际服务。 – ifti