将来自SQS队列的消息强制发送到其死信队列?

4

我想为我的AWS SQS队列及其关联的死信队列编写一些测试。我希望在我的测试中以某种方式强制队列中的消息传递到其DLQ,然后从DLQ中读取以查看消息是否存在。

从DLQ中读取没有问题。但是有没有人知道一种快速简便的方法,可以通过编程方式强制sqs队列将消息发送到其关联的DLQ?


你尝试过直接从原始队列获取并将其写入关联的死信队列吗(这只是另一个队列)? - jarmod
我可以这样做,但那会违背测试的目的。我的目标是测试SQS队列是否能将消息移动到其关联的DLQ。虽然我是AWS的新手,但我不确定SQS队列何时开始将其消息移动到DLQ。我知道这与队列的maxReceiveCount有关。 - Slippy
啊,我明白了。阅读关于理解SQS死信队列(DLQ)的部分:“当消息的ReceiveCount超过队列的maxReceiveCount时,SQS将消息移动到DLQ。” 您可以从队列中触发一个虚拟Lambda函数,并让您的函数每次仅抛出异常(或以其他方式指示错误)。 - jarmod
1个回答

8
死信队列只是一个SQS队列,您可以像发送其他队列一样向它发送消息。
当您创建普通队列时,需要配置DLQ并传递将用作DLQ的队列ARN。
配置DLQ时,您设置了最大接收计数(控制台上的“最大接收次数”),即在将消息移动到死信队列之前,将该消息传递到源队列的次数。当对于某个消息的ReceiveCount超过队列的maxReceiveCount时,Amazon SQS会将消息移动到死信队列。

enter image description here

如果想测试将消息发送到 DLQ 的过程,您需要在测试中强制发生队列消息处理错误以将消息发送到 DLQ 队列,这将是了解错误是否正确进入队列的最佳方式。

将消息发送到 DLQ 的过程可以通过以下方式完成:

  • 您可以显式地将消息发送到 DLQ,如果您发现某个错误并且不希望在该时间处理或删除该消息。

  • 如果您读取消息的次数超过 maxReceiveCount 并且不处理该消息(从队列中读取并删除),则 AWS SQS 服务将理解您在处理该消息时遇到问题,并自动将其发送到 DLQ 中。 (例如,maxReceiveCount 等于 1,您读取消息两次但未删除)

要了解有关 DLQ 的更多信息,请查看此处:Amazon SQS dead-letter queues


有什么建议可以强制发生错误吗?错误不是会在AWS服务器上发生吗?我不确定如何使sendMessage请求成功通过,但一旦到达AWS服务器后也导致出错。 - Slippy
3
我已更新我的回答,解释了DLQ的工作原理以及如何实现您想要的操作。 - valdeci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接