RabbitMQ (Русский)
RabbitMQ — брокер сообщений на основе AMQP. Он предоставляет общую платформу для отправки и приёма сообщений и надёжное хранилище необработанных сообщений.
Установка
Установите пакет rabbitmq.
Arch Linux часто публикует новые версии Erlang до того как RabbitMQ начнёт их поддеживать, вызывая неочевидные ошибки. Рекомендуем удостовериться что версия RabbitMQ в репозиториях совместима с упакованным Erlang. Если версия несовместима, вым нужно установить пакет Erlang из AUR (пример. erlang-27AUR для Erlang 27) и вручную скомпирировать пакет rabbitmq.
Настройка
Начальная настройка не требуется, просто запустите и/или включите службу rabbitmq.service.
По умолчанию файл с настройками располагается в /etc/rabbitmq/rabbitmq-env.conf. Больше информации можно найти в официальной документации.
Включение MQTT
RabbitMQ может работать в роли сервера MQTT. Для использования такого функционала необходимо подключение плагина.
# rabbitmq-plugins enable rabbitmq_mqtt
Чтобы изменения вступили в силу, необходимо перезапустить сервис RabbitMQ.
Клиенты должны пройти аутентификацию, прежде чем они смогут писать в темы. RabbitMQ распределяет трафик между виртуальными хостами, вам необходимо использовать `configured_vhost_name:your_user_name` в качестве имени пользователя, чтобы аутентифицироваться.
Включение администрирования через HTTP
Чтобы включить Web-консоль администратора, выполните:
# rabbitmq-plugins enable rabbitmq_management
Затем перейдите на ip-адрес:15672. Имя пользователя и пароль по умолчанию guest.
Решение проблем
Остановка rabbitmq.service зависает на минуты
Пакет Rabbitmq устанавливает зависимость epmd (Erlang Port Mapping Daemon). Если вы запустите rabbitmq через systemd, он запустит демон epmd, который не будет остановлен после выполнения команды systemctl stop rabbitmq. Для решения, добавьте юнит epmd.service как зависимость /etc/systemd/system/rabbitmq.service в секции Unit:
After=epmd.service
Не забудьте перезагрузить демоны и сервис systemctl daemon-reload && systemctl restart rabbitmq.
Изменение имени хоста
Если после установки rabbitmq вы изменили сетевое имя машины, служба не сможет запуститься.
Это связано с записью NODENAME в /etc/rabbitmq/rabbitmq-env.conf.
Обновите его:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@new-hostname ...
После обновления RabbitMQ до последней версии он не может запуститься
Проблема может быть вызвана неверным NODENAME в /etc/rabbitmq/rabbitmq-env.conf.
Вы можете скорректировать @hostname так же, как описано в разделе #Изменение имени хоста.
В случае если при старте в сервисе происходит ошибка:
BOOT FAILED
[error] <0.218.0> ===========
[error] <0.218.0> Error during startup: {error,failed_to_initialize_feature_flags_registry}
Похоже на то что ошибка происходит из-за несовместимости плагинов с RabbitMQ после обновления. Одно из решений - полностью удалить все данные и переустаноить пакет:
# pacman -Rn rabbitmq # rm -r /etc/rabbitmq # rm -r /var/lib/rabbitmq [Воможно необязательно] # pacman -S rabbitmq # systemctl start rabbitmq.service
После переустановки с последней версией (4.0.5-3) всё ещё могут быть ошибки с несуществующими переменными. В этом случае добавьте:
/etc/rabbitmq/rabbitmq-env.conf
PLUGINS_DIR="/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins" ...
rabbitmqctl и другие утилиты командной строки не найдены
С последней версией (4.0.5-3) похоже что /usr/lib/rabbitmq/bin/ не добавлен в $PATH, также смотрите #Erlang cookie error.
Erlang cookie error
Ошибка аутентификации может быть вызвана неверной настройкой HOME для rabbitmq:
Authentication failed (rejected by the remote node), please check the Erlang cookie ... home dir: /root
Домашняя директория может быть задана в конфигурационном файле:
/etc/rabbitmq/rabbitmq-env.conf
... HOME=/var/lib/rabbitmq ...
can't establish TCP connection
Если вы получили эту ошибку, тогда проверьте, что первая строка с вашим хостом в /etc/hosts содержит тот же IP-адрес, что и в /etc/rabbitmq/rabbitmq-env.conf (эта ошибка часто случается, если вы привязали сервер rabbitmq к определённому интерфейсу).
Python-клиент pika не может подключиться к localhost
При попытке подключиться к localhost с помощью клиента pika Python может возникнуть исключение:
... pika.exceptions.ProbableAccessDeniedError: (541, "INTERNAL_ERROR - access to vhost '/' refused for user 'guest': vhost '/' is down")
По умолчанию настройки RabbitMQ такие:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@localhost NODE_IP_ADDRESS=0.0.0.0 NODE_PORT=5672
Если удалить имя пользователя в строке NODENAME и оставить только хост (который должен соответствовать одному из хостов, прописанных в /etc/hosts), то проблема решится:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=localhost NODE_IP_ADDRESS=0.0.0.0 NODE_PORT=5672
Incompatible feature flags, 263
Возможно что ваша версия RabbitMQ несовместима с установленным Erlang. Смотрите заметку в #Installation.
Смотрите также
- Wikipedia:ru:RabbitMQ
- конфигурация ядра erlang} для тонкой настройки
- пример rabbitmq.config (не входит в состав пакета)