{{tag>message-broker-server server daemon}}


====== RabbitMQ - Сетевой брокер сообщений ======

RabbitMQ ‒ это брокер сообщений. Его основная цель ‒ принимать и отдавать сообщения. Его можно представлять себе, как почтовое отделение: когда Вы бросаете письмо в ящик, Вы можете быть уверены, что рано или поздно почтальон доставит его адресату [видимо, автор ни разу не имел дела с Почтой России]. В этой аналогии RabbitMQ является одновременно и почтовым ящиком, и почтовым отделением, и почтальоном.

===== Терминалогия =====

  * Producer (поставщик) ‒ программа, отправляющая сообщения.
  * Queue (очередь) ‒ имя «почтового ящика». Она существует внутри RabbitMQ. Хотя сообщения проходят через RabbitMQ и приложения, хранятся они только в очередях. Очередь не имеет ограничений на количество сообщений, она может принять сколь угодно большое их количество ‒ можно считать ее бесконечным буфером. Любое количество поставщиков может отправлять сообщения в одну очередь, также любое количество подписчиков может получать сообщения из одной очереди.
  * Consumer (подписчик) ‒ программа, принимающая сообщения. Обычно подписчик находится в состоянии ожидания сообщений.

Поставщик, подписчик и брокер не обязаны находиться на одной физической машине, обычно они находятся на разных.
===== Как работает RabbitMQ? =====


RabbitMQ предоставляет интерфейс, соединяющий отправителей (Publishers) с получателями (Consumers) при помощи брокера, который распределяет данные в соответствующие списки — очереди сообщений (Message Queues).

|APPLICATION     |       EXCHANGE|        TASK LIST|        WORKER|
|[DATA]          |	    [DATA]|          [D]+[D][D][D]|    [DATA]|
|Publisher       |        EXCHANGE|          Queue|         Consumer|

===== Преимущества RabbitMQ =====


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

===== Краткий обзор AMQP =====


AMQP (Advanced Message Queuing Protocol) – это широко распространённый открытый стандарт для распространения и передачи сообщений. Как протокол и стандарт, он устанавливает общую основу для взаимодействия различных приложений и брокеров сообщений и устраняет проблемы, вызванные индивидуальным проектированием программ.

===== Установка RabbitMQ =====

  $ apt-get install rabbitmq-server

===== Запуск и Провека =====

<code sh>
# Запуск:
service rabbitmq-server start
# Остановка:
service rabbitmq-server stop
# Перезапуск:
service rabbitmq-server restart
# Проверка статуса:
service rabbitmq-server status  
</code>
===== Установка плагинов =====

==== Заголовок ====

  $ rabbitmq-plugins enable rabbitmq_amqp1_0 rabbitmq_management rabbitmq_management_visualiser rabbitmq_mqtt rabbitmq_stomp
  
==== Заголовок ====
  
  $ rabbitmq-plugins enable rabbitmq_management rabbitmq_management_visualiser rabbitmq_stomp
===== Запуск консоли =====

Разрешаем доступ к консоли по guest извне 

<note important>Только для разработки\\
<code sh>
echo "[{rabbit, [{loopback_users, []}]}]." > /etc/rabbitmq/rabbitmq.config
</code>
</note>

По умолчанию консоль будет доступна по порту 15672 на адресе **http://[IP_адрес_сервера]:15672**

===== Клиенты =====

  * [[php:modules:rabbitmq|]]
  * [[servers:rabbitmq:rabbitmq_management|]]

===== Ссылки =====

  * http://habrahabr.ru/post/150134/
  * http://habrahabr.ru/post/200870/
  * http://habrahabr.ru/post/201096/
  * http://habrahabr.ru/post/201178/
  * [[http://habrahabr.ru/post/149694/|RabbitMQ tutorial 1 — Hello World (python)]]
  * [[http://habrahabr.ru/post/150134/|RabbitMQ tutorial 2 — Очередь задач (python)]]
  * [[http://habrahabr.ru/post/200870/|RabbitMQ tutorial 3 — Публикация/Подписка (php)]]
  * [[http://habrahabr.ru/post/201096/|RabbitMQ tutorial 4 — Роутинг (php)]]
  * [[http://habrahabr.ru/post/201178/|RabbitMQ tutorial 5 — Тематики (php)]]
  * [[http://habrahabr.ru/post/236221/|RabbitMQ tutorial 6 — Удаленный вызов процедур (эта статья, python)]]
  * http://habrahabr.ru/post/271807/
  * [[http://habrahabr.ru/post/119839/|Моделируем полёт PHP на крыльях Erlang]]
  * [[http://www.8host.com/blog/ustanovka-i-upravlenie-rabbitmq/|УСТАНОВКА И УПРАВЛЕНИЕ RABBITMQ]]
  * http://habrahabr.ru/post/235505/