Install RabbitMQ on Ubuntu 22.04 Server Edition. Plugin Console, first message
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».
# sudo apt update -y && sudo apt upgrade;
# sudo apt-get install wget curl vim gnupg apt-transport-https software-properties-common lsb-release -y;
# sudo add-apt-repository ppa:rabbitmq/rabbitmq-erlang
# sudo apt update
# sudo apt install erlang
# curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
# sudo apt update
# sudo apt install rabbitmq-server -y
- 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:
RabbitMQ status:
# systemctl status rabbitmq-server
# 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