RabbitMQ

<< Click to Display Table of Contents >>

Navigation:  Linux - Ubuntu 24.04 >

RabbitMQ

Einführung

RabbitMQ ist ein Verteiler von Nachrichten. Über RabbitMQ kann man Programme in verschiedenen Programmiersprachen kommunizieren lassen.

The Home Page of RabbitMQ

Bei der Installation von RabbitMQ muß man eine Client- und eine Server-Installation unterscheiden. Eine Client-Installation ist dann möglich, wenn ein RabbitMQ Server auf einer anderen Maschine genutzt werden soll - ansonsten ist eine Vollinstallation notwendig.

Installation

Man beachte das Installationsscript unter "pas".

Client-Installation

Die Client-Installation erfolgt durch die Installation eines Packages unter Ubuntu:

 

 
sudo apt-get install librabbitmq-dev
 

 

Diese Installation legt die notwendige Bibliothek unter '/lib/x86_64-linux-gnu/librabbitmq.so.4' ab. Auf diese Bibliothek greift das Gemstone/RabbitMQ Binding zu. Hierzu braucht man mindestens die Version Gemstone/S 3.6.5.

 

Server-Installation

Bei der Server-Installation greifen wir auf die Installation von Cloudsmith zurück, die auch auf den offiziellen Webseiten von RabbitMQ erwähnt wird als eine der beiden Hauptanbieter von aktuellen Packages.

Die wesentlichen Skripte sind für die aktuellen Ubuntu-Serverlizenzen zusammengefasst.

Ubuntu 22.04 (jammy)

 

#!/usr/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Cloudsmith: modern Erlang repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Cloudsmith: RabbitMQ repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

 

Ubuntu 24.04 (noble)

 

#!/bin/sh

 

sudo apt-get install curl gnupg apt-transport-https -y

 

## Team RabbitMQ's signing key

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null

 

## Add apt repositories maintained by Team RabbitMQ

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF

## Modern Erlang/OTP releases

##

deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main

deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main

 

## Latest RabbitMQ releases

##

deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main

deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main

EOF

 

## Update package indices

sudo apt-get update -y

 

## Install Erlang packages

sudo apt-get install -y erlang-base \

                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \

                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \

                        erlang-runtime-tools erlang-snmp erlang-ssl \

                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

 

## Install rabbitmq-server and its dependencies

sudo apt-get install rabbitmq-server -y --fix-missing

 

 

RabbitMQ Version abfragen

Die Version von rabbitMQ kann man über das folgende Statement ermitteln:

 

 

sudo  rabbitmqctl version

 

Server Installation - Configuration

Die Konfigurationsdatei sollte im Verzeichnis /etc/rabbitmq liegen. Nach der Installation ist das Verzeichnis aber leer. Um eine Konfigurationsdatei anzuleen, kann man einen einfachen Text-Editor benutzen und eine Datei mit dem Namen rabbitmq.conf anlegen. Dort werden die folgenden Konfigurationseinträge reingeschrieben.

Starting and Stopping the Service

Der Server kann mit dem folgendem Statement gestartet werden:

 

sudo service rabbitmq-server start

 

Der Server kann mit dem folgendem Statement angehalten werden:

 

sudo service rabbitmq-server stop

 

Der RabbitMQ Server wird nicht automatisch gestartet. Dies kann man aber mit dem folgenden Statemwent erreichen:

 

sudo systemctl enable rabbitmq-server

 

SSL/TLS

Rabbitmq is portable - so you have to do all the stuff by yourself. This ist NOT nice, but ok. You have to change the configuration file to make all stuff working under SSL. After the installation, RabbitMQ is only accessable via plain http. Here an example how to make changes, so that RabbitMQ works under SSL/TLS. You need your certification for your domain, a private key file (alles was mit "blubber" s.u. benannt wird) and a cacertfile (a summary of Level 1 certificates).

 

management.path_prefix    = /rabbitmq

management.ssl.port       = 15671

management.ssl.cacertfile = /home/1234567/ssl/all_cacerts.pem

management.ssl.certfile   = /home/1234567/ssl/blubber_ssl_certificate.pem

management.ssl.keyfile    = /home/1234567/ssl/blubber_private_key.pem

 

listeners.ssl.default     = 5671

ssl_options.cacertfile    = /home/1234567/ssl/all_cacerts.pem

ssl_options.certfile      = /home/1234567/ssl/blubber_ssl_certificate.pem

ssl_options.keyfile       = /home/1234567/ssl/blubber_private_key.pem

ssl_options.verify        = verify_peer

# ssl_options.fail_if_no_peer_cert = true

 

The only problem here is to get a cacertfile. You may either create an example from all certification files located under /etc/ssl/certs via

cat /etc/ssl/certs/* > /home/1234567/ssl/all_cacerts.pem

or via other ways:

https://curl.se/docs/caextract.html

http://www.cacert.org/index.php?id=3

Firewall

Always think about the ports you have to enable in your firewall: 15671, 15672, 5671, 5672 at least.

Installation of UI Management

After a fresh installation there is no UI Management plugin installed. So you have no browser UI to manage your RabbitMQ instance. You have to do this via rabbitmq's command line tool.

 

sudo rabbitmq-plugins enable rabbitmq_management

 

Public Login into the UI Management

Well, when rabbitmq is installed, there is a guest / guest user, but with this user you are not allowed to enter into the UI Management plugin. So you have to add a new user. For a replacement of the guest user, please do not define it as an adminstrator. The solution is more or less:

 

sudo rabbitmqctl add_user username password

sudo rabbitmqctl set_user_tags username administrator

sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

 

User Interface

Die Benutzeroberfläche kann bei https und ssl/tls wie folgt aufgerufen werden:

 

https://<fullname>:15671 oder https://<fullname>:15671/rabbitmq/

 

Die Benutzeroberfläche kann lokal mit http aufgerufen werden:

 

http:/localhost:15672

 

Aktivierung - MQTT über WebSockets

Für die Anbindung von WebApplication wird das RabbitMQ Web MQTT Plugin genutzt. Es wird mit RabbitMQ ausgeliefert. Die Anwendungen bauen einen WebSocket auf, abonnieren die gewünschten Kanäle und erhalten dann die Nachrichten. Man beachte, daß man für die MQTT Anbindung einen eigenen Benutzer festlegen sollte. Die Credentials für diesen Benutzer erhält der Client über das Session Objekt. Diese Informationen muß er bei der Anmeldung bei MQTT über WebSockets nutzen.

Man möge beachten, dass man den default_user und default_pass für dieses Plugin auf einen Benutzer setzt, der keine Berechtigungen hat. Da die WebSocket Anbindung durch einen Apache getunnelt wird, erscheinen alle Anmeldungen als "localhost" getrieben - und dadurch hätten automatisch der default_user alle Berechtigungen.

Das Plugin gibt einen WebSocket Endpunkt unter 15675 frei ("ws://127.0.0.1:15675/ws").

Freigabe des Plugins

 

rabbitmq-plugins enable rabbitmq_web_mqtt

 

Konfiguration des Plugin

Hier die Konfigurationseinträge für das Plugin. Der benutzer "guest" sollte abgeschaltet werden und ein anderer Benutzer genutzt werden.

 

 

web_mqtt.ssl.port       = 15676
web_mqtt.ssl.backlog    = 1024
web_mqtt.ssl.cacertfile = /path/to/ca_certificate.pem
web_mqtt.ssl.certfile   = /path/to/server_certificate.pem
web_mqtt.ssl.keyfile    = /path/to/server_key.pem
# needed when private key has a passphrase
# web_mqtt.ssl.password   = changeme