Rabbit MQ installation on Ubuntu 22.04

on 22-03-2024

Install RabbitMQ on Ubuntu 22.04 Server Edition. Plugin Console, first message

 

RabbitMQ

  • Broker exchange
  • Write in Erlang
  • Native for Supports AMQP,
  • Supports (plugin)  STOMP: Streaming Text Oriented Messaging, MQTT: Message Queuing Telemetry Transport
  • Similar :IBM QF,KAFKA, Apache ActiveMQ,Amazon MQ/Kinesis, Azure Event Bus, Google Cloud, Pub/sub,Redis Stream.

AMQP (the protocol):

  • Queues storage
  • The message is the principal subject.

    Message parts:

  • Header
  • Properties (key,value)
  • Body: payload (bit sequence)
  • FIFO: lista ordenada
  • After worker send confirmation message (ACK), read & proccess, the message is deleted.

Basics:

- Exchanges
- Routing keys
- Bindings

 


Tipos de exchanges:

- nameless: nunca entendi bien para que usar, es igual a direct masomenos
- direct: solo a una cola que coincida el valor de RoutingKey especificados en los bindings
- fanaout: se enruta a todas las colas enlazadas (binding) sin importar el routing key, las ignora.
- topic: se enruta a una o varias cuando el routing key cumpla un patron
- headers: como en topic pero con mas atributos


Atributos de las colas:

- Nombre de la cola: Aunque los nombres de las colas puede ser auto-generados por RabbitMQ, es recomendable especificar nosotros el nombre siguiendo un patrón (naming convention), que nos ayude en el mantenimiento (ej: asignar permisos mediante RegEx, gracias a la nomenclatura).
- Durabilidad. Representa la persistencia. Una cola transient (no durable) quedará vacía después de un reinicio, mientras que una cola durable mantendrá sus mensajes tras un reinicio.
- Auto-borrado. La cola se eliminará automáticamente cuando todos los consumidores se desconecten de ella.
- Classic ó Quorum. Una cola Classic necesita una política de Mirroring para tener alta disponibilidad, mientras que una cola Quorum tiene alta disponibilidad por defecto.
- Exclusividad. Una cola exclusiva es utilizada por una única conexión, y eliminada automáticamente cuando dicha conexión finaliza.
- Cola priorizada. Las colas son FIFO por defecto, pero también es posible crear colas Priorizadas, que permiten ordenar los mensajes teniendo en cuenta su prioridad, con el coste adicional de CPU y latencia que esto implica, y sin poder garantizar con totalidad, que los mensajes se consuman según el orden de prioridad. La Prioridad es un atributo de los mensajes.
- TTL. Permite eliminar (descartar) los mensajes existentes en la cola (no consumidos) después de un periodo de tiempo especificado, para evitar llenados que puedan acabar produciendo incidencias graves en Producción.
Hay muchas más opciones, como Lazy Queues, Dead Letter Queues, etc.

nomenclatura de colas:

prefix.purpose.details.environment

prefix. Permite indicar con una letra el tipo de objeto, como «q» para las colas, «ex» para los exchanges, y «b» para los bindings.
purpose. Permite indicar el propósito, como podría ser «logs», «notify», «process», «requests», «events», etc.
details. Permite añadir información adicional, para que el nombre del objeto sea más descriptivo.
environment. Permite indicar el entorno, como «prod», «dev», «test», y «qa».


 
 Installing single-node RabbitMQ (Ubuntu 22.04 )


1.- Getting basics

 

# sudo apt update -y && sudo apt upgrade;
# sudo apt-get install wget curl vim gnupg apt-transport-https software-properties-common lsb-release -y;

2.- Erlang

 

# sudo add-apt-repository ppa:rabbitmq/rabbitmq-erlang
# sudo apt update
# sudo apt install erlang

 

3.- RabbitMq

 

# curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
# sudo apt update
# sudo apt install rabbitmq-server -y


4.- Folders

- Un usuario rabbitmq
- Un directorio /etc/rabbitmq donde podamos almacenar los ficheros de configuración de RabbitMQ
- Un directorio /usr/lib/rabbitmq donde están lo binarios, incluyendo el utilizado por el servicio/demonio y la interfaza de comandos de RabbitMQ con la que podremos realizar diferentes tareas adminitrativas.
- Un directorio /var/log/rabbitmq donde dejará los logs
- Un servicio o demonio rabbitmq-server, al arrancar además proporcionará la API RESTful de RabbitMQ, con la que podremos hacer multitud de tareas, así como integrarnos con otros sistemas.
- Además, por defecto RabbitMQ utilizará los siguientes puertos:

 

5.- PORTS

  • tcp-5672. Utilizado para el protocolo AMQP, se utiliza para la entrada de mensajes.
  • tcp-25672. Utilizado para la comunicación interna en un Cluster de RabbitMQ.
  • tcp-15672. Utilizado para el acceso a la API RESTful de RabbitMQ, así como a la Consola de Gestión, en caso de estar instalada


RabbitMQ status:
 

# systemctl status rabbitmq-server

 

Management Console (GUI)


 

# sudo rabbitmq-plugins enable rabbitmq_management
# sudo rabbitmqctl add_user admin StrongPassword
# sudo rabbitmqctl set_user_tags admin administrator
# sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

 

Basic commands.

#sudo rabbitmqctl list_queues
#sudo rabbitmqctl list_exchanges
#sudo rabbitmqctl list_bindings