¿Cómo configurar RabbitMQ con Python utilizando la biblioteca Pika?
RabbitMQ es una potente biblioteca para trabajar con protocolos de mensajería como AMQP (Advanced Message Queuing Protocol). En esta guía, aprenderás a configurar RabbitMQ utilizando la biblioteca Pika en Python, entender la importancia de manejar colas de mensajes y crear conexiones seguras y eficientes.
¿Qué es Pika y cómo se usa?
Pika es una biblioteca que permite interactuar de manera sencilla con RabbitMQ. Ofrece mecanismos básicos para gestionar colas de mensajes, lo cual es vital para aplicaciones que dependen mucho de la mensajería. Para trabajar con Pika, primero debes incluirla manualmente en tu archivo requirements.txt para asegurarte de que solo instalas lo necesario.
pika
¿Por qué no usar entornos virtuales como Virtualenv?
Existen algunos peligros al usar entornos virtuales. Por ejemplo, Virtualenv puede crear una idea falsa de seguridad y flexibilidad al no tener cuidado con la descripción detallada de tus requisitos. Es recomendable anotar manualmente las bibliotecas que se utilizan, como se vio con requirements.txt, para tener un control claro de lo que tu proyecto necesita.
¿Cómo se crea una clase de conexión en Python?
El siguiente paso en nuestra configuración es crear una clase que maneje la conexión a RabbitMQ. Esta clase encapsula la conexión y el canal, lo cual facilita escribir código orientado a objetos.
import pika
classConexionRabbitMQ:def__init__(self, config_ruta_secreta='config.env'):# Cargar configuraciones desde el archivo secreto self.parametros = self.cargar_configuracion(config_ruta_secreta) self.conexion = self.crear_conexion() self.canal = self.crear_canal()defcargar_configuracion(self, ruta):# Lógica para cargar y leer configuracionespassdefcrear_conexion(self):# Crear la conexión a RabbitMQ parametros = pika.ConnectionParameters( host='localhost', credentials=pika.PlainCredentials('usuario','clave'))return pika.BlockingConnection(parametros)defcrear_canal(self):# Crear un canal desde la conexiónreturn self.conexion.channel()
¿Cómo se establecerán configuraciones en RabbitMQ?
Tienes que asegurarte de que las configuraciones estén definidas adecuadamente. Esto incluye la creación de colas virtuales, usuarios, permisos y más. Utiliza la línea de comandos de RabbitMQ para añadir usuarios y colas virtuales. Aquí se muestra cómo crear y configurar un host virtual en RabbitMQ:
# Crear un host virtualsudo rabbitmqctl add_vhost PlatziVHost
# Crear un usuariosudo rabbitmqctl add_user platzi password
# Asignar permisos al usuario en el host virtualsudo rabbitmqctl set_permissions -p PlatziVHost platzi ".*"".*"".*"
¿Cómo gestionamos colas de mensajes en RabbitMQ?
Al tener un canal, puedes declarar una nueva cola que será gestionada por tu aplicación de mensajería. Es crucial declarar explícitamente las colas en RabbitMQ para que los mensajes puedan ser enviados y recibidos correctamente.
self.canal.queue_declare(queue='mi_cola')
¡Y así logras configurar RabbitMQ usando Pika en Python! Esta preparación te permitirá manejar colas de manera eficiente, garantizando que tus aplicaciones de mensajería funcionen de manera segura y óptima. Continúa explorando, probando y ajustando tus configuraciones para sacarle el máximo provecho a RabbitMQ.
Super inconforme con este curso, es el primer curso de platzi de los muchos que he tomado que no esta a la altura, espero que tenga una nueva version con mejor contenido, el profesor a cada rato dice que no es la forma correcta de hacerlo pero igual lo hace de esa manera, en que momento nos va a enseñar cual es la forma correcta?
Concuerdo contigo, la teoría esta muy bien
Pero en practica no ha explicado nada
Esta vez estoy de acuerdo. 😞
Sólo me ha dejado en claro que Celery es una muy buena opción pero más allá de ello, nada.
Que curso tan malo
La verdad también estoy super perdido :c
Si señor, Bien Malo
Este curso es demasiado anti platzi, que aburrido. Por favor renueven este curso con el profesor Pablo Trinidad
Definitivamente, Pablo lo haría mucho mucho mejor
Respetando mucho las opiniones de mis compañeros, yo si pienso que el curso esta muy bueno. Por que como ingeniero backend a mi lo que me importa es entender la lógica de como funcionan las herramientas y cuales son las que mas me convienen según distintas situaciones, el código es lo de menos eso lo aprendo en stackoverflow o en la web pero el que sabe de verdad no es el que conoce la sintaxis, el programador de verdad sabe la lógica y tiene en su cabeza cual herramienta es la que mas le sirve para sus diferentes labores y eso es lo que nos esta brindando este maestro.
De acuerdo con parte con usted, Pero creo que el curso le faltó mas profundidad aun en lo que comentas, Con todo respeto 😊
Me salta un poco que no use un linter y de pronto tenga lineas muy largas. Pep8 no lo dicta así.
Siempre es aconsejable usar un linter, como comentas. Sin embargo, recientemente hay una cierta polémica sobre qué se considera "línea larga", al menos en la lista de telegram de Python en español, con muchos proponiendo que se usen líneas de 120 caracteres, por ejemplo, y otras personas comentando simplemente que "Es el consejo de Pep 8 que suelen saltarse"
El número de líneas es algo un poco a gusto personal, tampoco deberían ser línea increíblemente extensas complicando la lectura del código. Lo que sí no creo es que sea una regla que deba saltarse, escoge un número entre 79 y 120 que se adapte a ti o a tu pantalla si estás trabajando solo.
Crear un host virtual en Rabbit
sudo rabbitmqctl add_vhost <nombre_vhost>
Crear un usuario en Rabbit para que use el vhost
sudo rabbitmqctl add_user <nombre de usuario> <password usuario>
Asignar permisos al usuario en el host virtual
sudo rabbitmqctl set_permissions -p <nombre vhost> <nombre de usuario> ".*" ".*" ".*"
Muy buenas las clases teoricas. Pero en la practicas super malo. Siento que estoy viendo clases en la universidad(con los profesores que no me gustan)
Estoy en total desacuerdo con la sugerencia de no usar pip freeze, ciertamente ese comando (pip freeze > requirements.txt) toma todas las dependencias que estés usando y las vuelca en el archivo, pero obviamente eso tiene que tener un precedente y es justo que estés trabajando bajo un entorno virtual, ya que si haces esto, SÓLO escribirá las dependencias que tengas DENTRO de ese entorno virtual y esto ayuda mucho, pues ya te identifica las versiones, no como (lamentablemente) lo ha estado explicando el profesor al no incluir las versiones, pues justo el tema de las versiones es lo que ayuda a reutilizar proyectos sin problemas (a no ser que uses docker). Es mi plena opinión personal basado en mi experiencia.
Creo que no recomienda usarlo porque con pip freeze también incluyes dependencias de las librerías que instalaste. Por ejemplo, si tú haces
pip install flask
también te instala Wekzeug, Jinja, Markupsafe, itsDangerous y Click. Y si no eres consciente de que dependencias necesitan tus librerías principales puedes llegar a confundirte, sobre todo si separas tus requirements según estés en desarrollo o producción.
El que no use un entorno virtual, ahora es inaceptable. Y las razones que da me parecen sin sentidos, pero quizá en aquel entonces era una práctica más común. La verdad lo ignoro.
Por último, si las versiones de los paquetes son muy importantes en tus proyectos, te recomiendo echarle un vistazo a pip-tools
https://github.com/jazzband/pip-tools
RabbitMQ es el broker por defecto de Celery por lo que no requiere ninguna configuración inicial, solamente definir el URL de la instancia del broker.
Pika es una librería de Python para interactuar con RabbitMQ. En términos simples lo único que hace es mandar y recibir mensajes de una cola.
Supongo que la finalidad de estas clases es entender RabbitMQ por si solo usando pika para poder trabajar en Python, para posteriormente ver con más facilidad las funcionalidades que agrega Celery.