RabbitMQ (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи RabbitMQ. Дата последней синхронизации: 23 ноября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

RabbitMQ — брокер сообщений на основе AMQP. Он предоставляет общую платформу для отправки и приёма сообщений и надёжное хранилище необработанных сообщений.

## Установка

Установите пакет 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`.

Чтобы разрешить удалённым машинам подключаться к консоли администратора по HTTP, впишите в `/etc/rabbitmq/rabbitmq.config` следующую строку:

    [{rabbit, [{loopback_users, []}]}].

## Решение проблем

### Остановка 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` так же, как описано в разделе #Изменение имени хоста.

### 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

## Смотрите также

- Wikipedia:ru:RabbitMQ
- конфигурация ядра erlang для тонкой настройки
- пример rabbitmq.config (не входит в состав пакета)

Category:

- Networking (Русский)