лучший способ скопировать данные из одной очереди aws (SQS) в другую SQS - PullRequest
0 голосов
/ 28 мая 2019

У меня есть очередь sqs в той же учетной записи и регионе, для тестирования некоторых новых функций я развернул свой код UAT в среде prod с другой конфигурацией, это процесс соединения, где один процесс передает сообщение другому, используя SQS.

Теперь, поскольку UAT имеет другую очередь SQS, но ожидает того же сообщения, которое мы публикуем в очереди prod, просто хотел проверить, есть ли конфигурация, которая может помочь мне реплицировать сообщения в другую очередь вместо явного написания кода.

1 Ответ

1 голос
/ 28 мая 2019

Вариант 1. Использование Amazon SNS для разветвления в очереди Amazon SQS

Если у вас есть доступ к процессу, который отправляет сообщение в очередь Amazon SQS, вы можете изменить его:

  • Отправить сообщение на тему Amazon SNS
  • Подписаться очереди Amazon SQS на тему SNS

Таким образом, когда сообщение отправляется в SNS, оно будет пересылаться во все подписанные очереди SQS. Это позволяет избежать копирования сообщений между очередями.

Обязательно настройте подписки SQS для Необработанная доставка сообщений , чтобы они получали точно такое же сообщение, которое было первоначально отправлено в SNS.

Вариант 2: повторяющиеся сообщения

Если у вас нет возможности изменить способ отправки сообщений и вам действительно нужно копировать сообщения из одной очереди в другую, вам потребуется написать программу для этого. Для этого необходимо:

  • Зацикливаться в исходной очереди, вызывая ReceiveMessages() несколько раз, чтобы получить каждое сообщение, передавая высокое значение VisibilityTimeout
    • Используйте SendMessage() для отправки сообщения в очередь назначения
    • Не удалять исходное сообщение (это приведет к тому, что сообщения будут оставаться невидимыми в течение определенного периода)

В вызове ReceiveMessage() можно указать период VisibilityTimeout. Установите это значение очень высоким, чтобы сообщения больше не отображались до тех пор, пока не будут получены все сообщения. Это предотвратит обработку сообщений более одного раза.

Новые сообщения в очереди назначения не будут идентичны исходным сообщениям, поскольку они будут иметь разные идентификаторы и временные метки. Однако содержимое самого сообщения будет сохранено.

...