将数据从一个 aws 队列 (SQS) 复制到另一个 SQS 的最佳方法

Nil*_*pru 3 amazon-sqs amazon-web-services

我在同一个帐户和区域中有一个 sqs 队列,为了测试一些新功能,我在具有不同配置的 prod 环境中部署了我的 UAT 代码,这是一个连接过程,其中一个进程使用 SQS 将消息传递给另一个进程。

现在,由于 UAT 有一个不同的 SQS 队列,但期望与我们在 prod 队列上发布的消息相同,只是想检查是否有一个配置可以帮助我将消息复制到不同的队列中,而不是显式编写代码。

Joh*_*ein 5

选项 1:使用 Amazon SNS 扇出到 Amazon SQS 队列

如果您有权访问将消息发送到 Amazon SQS 队列的进程,则可以更改它:

  • 将消息发送到Amazon SNS 主题
  • 将 Amazon SQS 队列订阅到 SNS 主题

这样,当一条消息被发送到 SNS 时,它将被转发到所有订阅的 SQS 队列。这避免了必须在队列之间复制消息。

请务必为原始消息传递配置 SQS 订阅,以便它们接收与最初发送到 SNS 的消息完全相同的消息。

选项 2:重复消息

如果您无法更改消息的发送方式,而您确实需要将消息从一个队列复制到另一个队列,则需要编写一个程序来执行此操作。它需要:

  • 通过ReceiveMessages()多次调用获取每条消息来循环遍历源队列,传递一个高VisibilityTimeout
    • 使用SendMessage()将消息发送到目标队列
    • 不要删除源消息(这会导致消息在一段时间内保持不可见)

ReceiveMessage()呼叫可以指定一个VisibilityTimeout时间段。将此值设置得非常高,以便在检索到所有消息之前消息不会再次可见。这将防止消息被多次处理。

目标队列中的新消息将与源消息不同,因为它们将具有不同的 ID 和时间戳。但是,消息本身的内容将被保留。