【问题标题】:best way to copy data from one aws queue (SQS) to another SQS将数据从一个 aws 队列 (SQS) 复制到另一个 SQS 的最佳方法
【发布时间】:2021-06-22 17:40:33
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-sqs


    【解决方案1】:

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

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

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

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

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

    选项 2:重复消息

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

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

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

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

    【讨论】:

    • 谢谢,John.. 这不是我永久需要的东西,在我们过渡到 prod 环境之前只需一个月左右的时间,我认为现在编写代码似乎只是一个可行的解决方案.
    【解决方案2】:

    如果您安装了 AWS CLI 和 jq 工具,那么这些行的 bash 脚本应该可以工作。虽然它会很慢,但对于临时使用来说已经足够了。

    #!/bin/bash
    
    #Transfers messages from one SQS queue to another
    
    if [[ $# -ne 2 ]]
    then
        echo "usage $0 : from-queue to-queue"
        exit 1
    fi
    
    echo getting
    aws sqs receive-message --queue-url=$1 >m1
    STATUS=$? 
    if [[ -s m1 ]]
    then 
        cat m1 | jq ".Messages|.[0]|.Body|fromjson" > m1.body
        rh=`cat m1 |  jq ".Messages|.[0]|.ReceiptHandle" |tr -d \"`
        echo sending
        aws sqs send-message --queue-url=$2 --message-body file://m1.body
        echo deleting
        aws sqs delete-message --queue-url=$1  --receipt-handle=$rh
    else 
        echo done
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-10
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 2016-04-13
      • 2016-08-18
      • 1970-01-01
      相关资源
      最近更新 更多