RabbitMQ

RabbitMQ
is a messaging broker, an intermediary for messaging. It gives your applications a common platform to send and receive messages, and your messages a safe place to live until received.
Installation
Install
the
rabbitmq
package.
Configuration
No configuration should be needed. Simply
start
and/or
enable
rabbitmq.service
.
Default configuration file location
/etc/rabbitmq/rabbitmq-env.conf
. See more about configuration
on the official docs
This article or section is out of date.
Reason:
Plugin path changed with 4.0.5 (Discuss in
Talk:RabbitMQ#Plugins Directory Missing
)
Enabling MQTT
RabbitMQ can act as MQTT server. For this functionality to work following plugin needs to be enabled:
# rabbitmq-plugins enable rabbitmq_mqtt
RabbitMQ service needs to be restarted for this change to take effect.
Clients need to authenticate before they can post to topics. RabbitMQ segregates traffic via virtual hosts, you need to issue `
configured_vhost_name:your_user_name
` as user name in order to authenticate.
Enabling HTTP admin
To enable the HTTP admin page:
# rabbitmq-plugins enable rabbitmq_management
Then navigate to
<ip_address_of_host>:15672
. Default credentials are
username:guest password:guest
Troubleshooting
Service stop hangs for a minutes
Rabbitmq package install epmd (Erlang Port Mapping Daemons) as dependency. If you run rabbitmq server via systemd, it will start detached epmd process, that will not be stopped with
systemctl stop
. You can avoid this, if add
After=epmd.service
in
[Unit]
section. Do not forget to reload daemons.
Changed hostname
If you have changed your hostname after you installed rabbitmq, it will no longer be able to start.
This is due to the
NODENAME
specified in
/etc/rabbitmq/rabbitmq-env.conf
.
Update it to reflect your new hostname, for example:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@my-new-hostname
...
Upgraded RabbitMQ to latest version and cannot start
This might cause your
/etc/rabbitmq/rabbitmq-env.conf
to get the wrong
NODENAME
.
For example, it might cause it to add another
@hostname
part. In any case, this can be fixed by following
#Changed hostname
.
In case the service does not start with error:
BOOT FAILED
[error] <0.218.0> ===========
[error] <0.218.0> Error during startup:  {error,failed_to_initialize_feature_flags_registry}
It looks like this error is related to an incompatibility in the plugins folder after upgrade. One solution is to completely remove all trace of rabbitmq and reinstall:
# pacman -Rn rabbitmq
# rm -r /etc/rabbitmq
# rm -r /var/lib/rabbitmq [May be unnecessary]
# pacman -S rabbitmq
# systemctl start rabbitmq.service
After restart with latest version (4.0.5-3) they may still be issue because of missing variables. In this case add:
/etc/rabbitmq/rabbitmq-env.conf
PLUGINS_DIR="/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins"
...
Issues with rabbitmqctl and other command line tools
With latest version (4.0.5-3) it looks like
/usr/lib/rabbitmq/bin/
is not in
$PATH
, also see
#Erlang cookie error
.
Erlang cookie error
Failure to authenticate might be caused by a wrong rabbitmq HOME setting:
Authentication failed (rejected by the remote node), please check the Erlang cookie
...
home dir: /root
Home can be set in the configuration file:
/etc/rabbitmq/rabbitmq-env.conf
...
HOME=/var/lib/rabbitmq
...
can't establish TCP connection
If you see this error then make sure first entry with your host name within
/etc/hosts
contains the same IP address as specified within
/etc/rabbitmq/rabbitmq-env.conf
(this error is common if you configure rabbitmq to bind to specific interface).
Can't connect with pika Python client through localhost
Trying to connect through localhost with pika Python client, raises an exception:
...
pika.exceptions.ProbableAccessDeniedError: (541, "INTERNAL_ERROR - access to vhost '/' refused for user 'guest': vhost '/' is down")
Default configuration file
/etc/rabbitmq/rabbitmq-env.conf
of the package is:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=rabbit@localhost
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672
Removing the username part of
NODENAME
, and leaving the hostname of the machine (which should match the one shown in
/etc/hosts
), fixes the issue:
/etc/rabbitmq/rabbitmq-env.conf
NODENAME=localhost
NODE_IP_ADDRESS=0.0.0.0
NODE_PORT=5672
See also
Wikipedia:RabbitMQ
erlang kernel parameters
- kernel parameters for advanced configuration
rabbitmq.config example
- rabbitmq.config example (not included with rabbitmq package)