Знать ключевые особенности RabbitMQ и как его использовать

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

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

Что такое очередь сообщений?

Брокер сообщений — это посредник, через который проходят все сообщения. Тем самым достигается дополнительная развязка между передатчиком и приемником. Отправитель отправляет сообщение брокеру сообщений, а брокер сообщений передает его получателю. Ключевым преимуществом здесь является то, что брокеру сообщений не нужно знать, где находится потребитель в сети «[1]. “

Далее мы начнем с рассмотрения шаблона обмена сообщениями запрос-ответ, а затем углубимся в RabbitMQ.

Шаблон обмена сообщениями запрос-ответ

Помимо стиля общения «запрос-ответ», существует еще много других, но это один из самых распространенных. В этом шаблоне одна система выступает в роли клиента, а удаленная система выступает в роли сервера. Как показано на рисунке выше, клиент запрашивает данные с сервера.

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

Для разработчика этот паттерн прост в реализации, но он также обеспечивает жесткую связь систем. И, как правило, жесткая связь систем нежелательна.

Шаблон обмена очередями сообщений

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

В отличие от шаблона «запрос-ответ», в этой системе обе системы действуют как издатели и потребители.

Как видно из этой диаграммы, таким образом мы получаем слабосвязанную архитектуру. И это одно из самых значительных преимуществ, которые вы получаете от использования очередей сообщений. В результате системам больше не нужно знать местоположение друг друга. Такое разделение систем позволяет разрабатывать их независимо, поскольку передача сообщений передается маркеру. Для получения дополнительной информации посмотрите мой другой пост о Message Brokers.

Ключевые особенности RabbitMQ

Есть много различных преимуществ, которые вы можете получить, используя Rabbit MQ; Далее мы более подробно рассмотрим наиболее важные из них:

Открытый исходный код:

  • RabbitMQ — это проект с открытым исходным кодом, написанный на Erlang. Им владела Pivotal Software Inc. Сейчас компания входит в состав VMware.

Поддерживает различные протоколы

  • С RabbitMQ ваша система может использовать комбинацию различных протоколов обмена сообщениями, таких как AMQP, MQTT и т. д.

Легкий

  • При использовании RabbitMQ требует минимального объема оперативной памяти.

Клиентские библиотеки для большинства современных языков

  • RabbitMQ не ограничивает их использованием определенного поставщика или языка. Различные библиотеки для наиболее распространенных языков, таких как Java, Ruby, Python, C# и т. д.

Удобный

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

Используется несколькими компаниями

  • Многие компании клянутся использовать RabbitMQ как часть своей архитектуры микросервисов.

Масштабируемость и гибкость

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

RabbitMQ и AMQP

RabbitMQ был одним из первых брокеров сообщений, реализовавших AMQP. Этот протокол является открытым стандартным протоколом, определяющим, как система обменивается сообщениями. Он представляет собой набор правил для взаимодействия систем друг с другом. Помимо описания взаимодействия между потребителем/производителем и брокером, он также определяет сообщение и команды.

Протокол относится к прикладному уровню и ориентирован на обмен данными между процессами в IP-сетях. AMQP считается бинарным протоколом, поскольку все данные отправляются в бинарном формате.

Элементы AMQP

Брокер

Брокер — это программа, которая получает и доставляет сообщения.

Очередь

Очередь существует в брокере и содержит последовательность сообщений.

Привязка

Связь между очередью и обменом [2]

Подключение

TCP-соединение используется между клиентскими приложениями и RabbitMQ. Если клиент отключается или происходит системный сбой, соединение закрывается.

Виртуальный хост

Виртуальный хост позволяет нам разделить различные рабочие среды внутри брокера. Например, разделите среду разработки и промежуточную среду.

Обмен

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

Канал

Канал — это виртуальное соединение внутри соединения. Публикация и потребление сообщения осуществляется по каналу. Он повторно использует уже открытое соединение, не требуя открытия нового потока TCP.

Брокер RabbitMQ

Как упоминалось выше, RabbitMQ — это брокер AMQP, реализованный на Erlang. Erlang считается очень надежным языком, хорошо подходящим для распределенных приложений. Кроме того, Erlang работает в любой операционной системе.

RabbitMQ основан на Mnesia, системе баз данных, написанной на Erlang. Это используется для сохранения данных. Например, Mnesia хранит информацию о пользователях, очереди и многое другое.

Прелесть RabbitMQ в том, что он может работать как в одиночном экземпляре, так и в кластере. Для использования кластера в основном используются возможности кластеризации, закрепленные в Erlang.

Несколько брокеров RabbitMQ могут быть подключены с использованием различных методов.

C# — пример реализации

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

Для получения дополнительной информации вы можете посмотреть здесь.

Если ваш экземпляр запущен, вы сможете перейти на http://localhost:15672 и увидеть следующую панель инструментов после входа в систему с помощью гостя: guest.

Для этого примера мы создадим простое консольное приложение для приема сообщений.

Начните с создания консольного приложения и назовите его по своему усмотрению.

1. Добавьте пакет Nuget: RabbitMQ.Client.

2. Создайте класс с именем MessageReceiver.cs, который реализует DefaultBasicConsumer.

3. Через внедрение зависимостей мы передаем интерфейс IModel.

4. Затем мы переопределяем метод HandleBasicDeliver и используем Console.WriteLine для отображения входящих сообщений.

5. Следующим шагом будет подключение нашего клиента к очереди сообщений. Поэтому мы должны открыть файл program.cs и отредактировать его.

(Подробнее см. https://www.tutlane.com/tutorial/rabbitmq/csharp-read-messages-from-rabbitmq-queue)

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

6. Поэтому добавьте через панель управления очередь, называемую demoqueue.

7. Запустите консольное приложение и опубликуйте сообщение через панель инструментов.

Вы должны увидеть это сообщение в работающем консольном приложении.

TL;DR;

  • RabbitMQ — это брокер сообщений AMQP, написанный на Erlang.
  • Он с открытым исходным кодом и прост в использовании на многих языках.
  • Очередь сообщений — это альтернатива классическому шаблону «запрос-ответ».
  • Одна система (клиент) запрашивает данные у другой системы (сервера) по схеме запрос-ответ. Сервер возвращает ответ.
  • В шаблоне обмена очередью сообщений связь осуществляется асинхронно через очередь сообщений.
Want to Connect?
You can contact me via my social media channels (Twitter,LinkedIn).
All drawings were created with Draw.IO.

Источники