我在相同的帐户和区域中有一个sqs队列,对于一些新功能测试,我已将我的UAT代码部署在具有不同配置的生产环境中,这是一个连接过程,其中一个过程使用SQS将消息传递给另一个。
现在,由于UAT具有不同的SQS队列,但期望与我们在产品队列上发布的消息相同,因此只想检查是否存在可以帮助我将消息复制到不同队列中的配置,而不是显式编写代码
答案 0 :(得分:1)
选项1:使用Amazon SNS扇出到Amazon SQS队列
如果您有权将消息发送到Amazon SQS队列的过程,则可以对其进行更改:
这样,当消息发送到SNS时,它将被转发到所有已订阅的SQS队列。这样可以避免在队列之间复制消息。
请确保为原始邮件传递配置SQS订阅,以使它们接收的邮件与原始发送给SNS的邮件完全相同。
选项2:邮件重复
如果您没有能力更改消息的发送方式,而实际上确实需要将消息从一个队列复制到另一个队列,则需要编写一个程序来这样做。它需要:
ReceiveMessages()
来获取每条消息,并传递一个高VisibilityTimeout
值来遍历源队列
SendMessage()
将邮件发送到目标队列 ReceiveMessage()
调用可以指定一个VisibilityTimeout
期间。将此值设置得很高,以便直到检索完所有消息后,这些消息才会再次显示。这样可以防止消息被多次处理。
目标队列中的新消息将与源消息不同,因为它们将具有不同的ID和时间戳。但是,消息本身的内容将被保留。
答案 1 :(得分:0)
如果您安装了 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