Как интегрировать служебную шину с RabbitMQ

Из этого руководства вы узнаете, как отправлять сообщения из RabbitMQ в служебную шину.

Вот несколько сценариев, в которых можно использовать эти возможности.

  • Настройки Edge. У нас есть настройки Edge для отправки сообщений в RabbitMQ, но необходимо переадресовывать эти сообщения в служебную шину Microsoft Azure для дальнейшей обработки, поэтому мы можем использовать многие возможности Azure для работы с большими данными.
  • Гибридное облако. Ваша компания только что приобрела стороннего производителя, который использует RabbitMQ для обмена сообщениями. Этот производитель использует другое облако. Пока он выполняет переход на Azure, вы уже можете приступить к совместному использованию данных, организовав мостовое соединение с RabbitMQ с помощью служебной шины Microsoft Azure.
  • Интеграция со сторонними производителями. Сторонний производитель использует RabbitMQ в качестве брокера и хочет отправить нам свои данные, но они находятся за пределами нашей организации. Мы можем предоставить ключ SAS, который обеспечит стороннему производителю доступ к ограниченному набору очередей служебной шины Microsoft Azure, куда он сможет переадресовывать свои сообщения.

Этот список можно продолжить, но в большинстве этих вариантов использования можно организовать мостовое соединение RabbitMQ с Azure.

Сначала необходимо создать бесплатную учетную запись Azure, зарегистрировавшись здесь.

После входа в учетную запись перейдите на портал Azure и создайте новое пространство имен служебной шины Microsoft Azure. Пространства имен — это контейнеры областей, в которых будут находиться компоненты обмена сообщениями, такие как очереди и разделы.

Добавление нового пространства имен служебной шины Microsoft Azure

На портале Microsoft Azure нажмите большую кнопку "+", чтобы добавить новый ресурс.

Create resource

Затем выберите "Интеграция" и щелкните "Служебная шина Microsoft Azure", чтобы создать пространство имен обмена сообщениями:

Select Azure Service bus

Вам будет предложено ввести сведения о пространстве имен. Выберите подписку Azure, которую нужно использовать. Если у вас нет группы ресурсов, вы можете ее создать.

Create namespace

Введите rabbitmq для параметра Namespace name, но вы также можете использовать любое название, которое захотите. Затем укажите расположение: East US. Выберите ценовую категорию Basic.

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

Create namespace confirmation

Вернитесь на портал Azure, и вы увидите новое пространство имен rabbitmq. Щелкните его, чтобы получить доступ к ресурсу и добавить в него очередь.

Resource list with new namespace

Создание очереди служебной шины Microsoft Azure

Теперь, когда у вас есть пространство имен служебной шины Microsoft Azure, нажмите кнопку Queues слева в разделе Entities, чтобы можно было добавить новую очередь:

Create queue

Очередь будет называться from-rabbitmq. Это напомнит о том, откуда поступают сообщения. Можно оставить все остальные параметры по умолчанию, но вы можете изменить их в соответствии со своими потребностями.

Включение подключаемого модуля RabbitMQ Shovel

Для отправки сообщений из RabbitMQ в служебную шину Microsoft Azure мы будем использовать подключаемый модуль Shovel, поставляемый вместе с RabbitMQ. Вы можете включить этот модуль и его визуальный интерфейс с помощью этой команды:

rabbitmq-plugins enable rabbitmq_shovel_management

Возможно, вам придется выполнить эту команду от имени привилегированного пользователя.

Теперь пора получить учетные данные, необходимые для подключения RabbitMQ к Azure.

Подключение RabbitMQ к служебной шине Microsoft Azure

Вам потребуется создать политику общего доступа (SAS) для своей очереди, чтобы RabbitMQ мог публиковать в ней сообщения. Политика SAS позволяет указать, какие действия внешняя сторона может выполнять с вашим ресурсом. Идея заключается в том, что RabbitMQ может отправлять сообщения, но не может прослушивать очередь или управлять ею.

Add SAS Policy

Установите флажок Send и щелкните Create, чтобы добавить политику SAS.

После создания политики щелкните ее, чтобы просмотреть основную строку подключения. Мы будем использовать ее, чтобы разрешить RabbitMQ взаимодействовать со служебной шиной Microsoft Azure:

Get SAS Policy

Прежде чем можно будет использовать эту строку подключения, вам нужно преобразовать ее в формат подключения AMQP для RabbitMQ. Поэтому перейдите к преобразователю строк подключения, вставьте свою строку подключения в форму и затем нажмите кнопку "Преобразовать". Вы получите строку подключения, которая поддерживает RabbitMQ. (Этот веб-сайт работает в браузере локально, поэтому данные не передаются по сети). Вы можете получить доступ к его исходному коду на сайте GitHub.

Convert connection string

Теперь откройте подключаемый модуль управления RabbitMQ в браузере http://localhost:15672/#/dynamic-shovels и перейдите к Admin -> Shovel Management, где можно добавить новый модуль Shovel, который будет отправлять сообщения из очереди RabbitMQ в вашу очередь служебной шины Microsoft Azure.

Add RabbitMQ Shovel

Вызовите ваш модуль Shovel azure и выберите AMQP 0.9.1 в качестве исходного протокола. На снимке экрана показан универсальный код ресурса (URI) по умолчанию amqp://, который подключает нас к локальному серверу RabbitMQ. Адаптируйте его к текущему развертыванию.

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

Затем в destination выберите AMQP 1.0 в качестве протокола. В поле URI введите строку подключения, полученную вами на шаге преобразования строки соединения Azure в формат RabbitMQ. Он должен выглядеть так:

amqps://rabbitmq-shovel:StringOfRandomChars@rabbitmq.servicebus.windows.net:5671/?sasl=plain

В поле Address мы вводим имя очереди служебной шины Microsoft Azure, в данном случае она называется from-rabbitmq. Щелкните Add Shovel, и ваша установка должна быть готова к получению сообщений.

Публикация сообщений из RabbitMQ в служебную шину Microsoft Azure

В интерфейсе управления RabbitMQ мы можем перейти к Queues, выбрать очередь azure и выполнить поиск панели Publish message. Появится форма, которая позволяет публиковать сообщения непосредственно в очереди. В нашем примере мы просто добавим в first message качестве Payload и нажмем Publish Message:

Publish first message

Вернитесь в Azure и проверьте свою очередь. Щелкните Service Bus Explorer на левой панели, а затем нажмите Обзор. Если все прошло успешно, вы увидите, что ваша очередь теперь содержит одно сообщение. Поздравляем!

Azure Service Bus Queue

Давайте убедимся, что именно это сообщение было отправлено из RabbitMQ. Выберите вкладку Peek и нажмите кнопку Peek, чтобы извлечь последние сообщения из вашей очереди. Щелкните сообщение, чтобы проверить его содержимое. Вы должны увидеть что-то похожее на приведенное ниже изображение с вашим first message.

Queue peek

Подведем итоги

Поздравляем! Вы многого достигли! Вам удалось получить сообщения из RabbitMQ в служебной шине Microsoft Azure. Давайте вкратце повторим эти шаги:

  1. создание пространства имен служебной шины Microsoft Azure;
  2. добавление очереди в пространство имен;
  3. добавление политики SAS в очередь;
  4. получение строки подключения очереди;
  5. включение подключаемого модуля RabbitMQ Shovel и интерфейса управления;
  6. преобразование строки подключения служебной шины Microsoft Azure в формат AMQP для RabbitMQ;
  7. добавление нового модуля Shovel в RabbitMQ и его подключение к служебной шине Microsoft Azure;
  8. публикация сообщений.

Следуя приведенным выше инструкциям, вы интегрировали области вашей организации, находящиеся за пределами Azure. С помощью подключаемого модуля Shovel вы смогли доставить сообщения из RabbitMQ в служебную шину Microsoft Azure. Это дает огромные преимущества, так как теперь вы можете разрешить надежным сторонним производителям подключаться к своим приложениям с помощью развертывания Azure.

В конце концов, суть службы сообщений заключается в создании подключений, и с помощью данного способа мы только что сделали это.

Следующие шаги