Skip to content

Instantly share code, notes, and snippets.

@DmitryevichD
Last active June 9, 2023 12:10
Show Gist options
  • Save DmitryevichD/fdcc6af04eb30a371672cdc9a9872f7f to your computer and use it in GitHub Desktop.
Save DmitryevichD/fdcc6af04eb30a371672cdc9a9872f7f to your computer and use it in GitHub Desktop.
amqp message duplicate

Дублирование сообщений для очередей подписок и аккаунтов

Необходимо иметь доступ к UI консоли рэббита и доступ к rabbitmqadmin

Шаг 1. Проврека наличия плагина shovel

rabbitmq-plugins list

При необходимости включить плагин

rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

Шаг 2. Создаем exchange и очереди дублирования сообщений

(Все операции выполняются для vhost, очередь которого нужно дублировать)

Subscription online_update_subscription

  • Создем очереди, в который будут дублироваться сообщения
    • online_update_subscription_copy_1
    • online_update_subscription_copy_2
    • online_update_subscription_copy_3
  • создаем exchange online_update_subscription_collector
    • type: fanout
    • durable: true
  • биндим exchange и указанные очереди

Customer online_update_customer

  • Создем очереди, в который будут дублироваться сообщения
    • online_update_customer_copy_1
    • online_update_customer_copy_2
    • online_update_customer_copy_3
  • создаем exchange online_update_customer_collector
    • type: fanout
    • durable: true
  • биндим exchange и указанные очереди

Шаг 3. Меняем очереди для billing application

  • Останавливаем billing
  • Добавляем в application.yml
    • amqp.update.subscription.queue.name: online_update_subscription_copy_1
    • amqp.internal.update.customer.queue.name: online_update_customer_copy_1
  • Запускаем биллинг. Логи не должны содержать ошибок

Шаг 4. Настраиваем shovel UI.Admin>Shovel Management

Subscription

  • Указываем:
    • Virtual host: <нужный virtual host>

    • Name: subscription_copy_msg

    • Source:

      • AMQP: по умолчанию
      • URI: amqp://<user>@/<virtual-host>
      • Queue.Name: online_update_subscription
      • Prefetch-count: <default>
      • Auto-Delete: Never
    • Distination:

      • AMQP: по умолчанию
      • URI: amqp://<user>@/<virtual-host>
      • Exchange.Name: online_update_subscription_collector
      • Acknowledgement mode: On confirm

Customer

  • Указываем:
    • Virtual host: <нужный virtual host>

    • Name: customer_copy_msg

    • Source:

      • AMQP: по умолчанию
      • URI: amqp://<user>@/<virtual-host>
      • Queue.Name: online_update_customer
      • Prefetch-count: <default>
      • Auto-Delete: Never
    • Distination:

      • AMQP: по умолчанию
      • URI: amqp://<user>@/<virtual-host>
      • Exchange.Name: online_update_customer_collector
      • Acknowledgement mode: On confirm

Итог:

Путь сообщщений

ERP --> online_update_subscription -> online_update_subscription_collector --> (online_update_subscription_copy...) ERP --> internal_update_customer -> online_update_customer_collector --> (online_update_customer_copy...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment