Instalación y creación de un programa básico pub/sub

Clase 19 de 36Curso de Celery 4

Resumen

¿Cómo comenzar con Celery y RabbitMQ en Python?

Comenzar un proyecto con Celery y RabbitMQ puede parecer complicado al principio, pero con las configuraciones adecuadas, se puede lograr una integración eficiente y segura. A lo largo de esta guía, te llevaré paso a paso por el proceso de configuración y creación de tareas con Celery y RabbitMQ, utilizando Python como lenguaje principal. También exploraremos cómo manejar eventos desde Slack y almacenarlos eficientemente.

¿Qué herramientas instalar y configurar?

Para empezar, asegúrate de haber instalado todas las herramientas necesarias. Esto incluye:

  • Python: el lenguaje principal para escribir nuestro código.
  • Celery: una librería para manejar la cola de tareas.
  • RabbitMQ: un broker de mensajes que trabajará junto con Celery para procesar las tareas.
  • SQLAlchemy: se recomienda para manejar bases de datos, en este caso, utilizaremos SQLite para el registro de logs.

¿Cómo se configura el entorno de desarrollo?

Es esencial preparar el entorno de desarrollo para evitar problemas durante la ejecución del programa. Aquí te dejo un conjunto de pasos básicos para configurar tu entorno:

  1. Variables de entorno: Se utilizan archivos .env para manejar de forma segura las configuraciones sensibles como claves y contraseñas.

  2. Archivos de configuración:

    from celery import Celery
    from datetime import datetime
    import sqlite3
    
    app = Celery('tasks', broker='amqp://guest@localhost//')
    
  3. Base de datos SQLite: Aunque no se recomienda para producción, su simplicidad lo hace ideal para desarrollos iniciales o entornos controlados.

¿Cómo registrar y manejar eventos de Slack?

El objetivo de la aplicación es capturar y registrar eventos desde Slack. Para gestionar esto, el enfoque es:

  • Registrar cada evento o comando que proviene de Slack en la base de datos. Esto implica crear una tabla simple con el nombre del comando y la cantidad de veces que se invoca.

¿Cómo crear tareas con Celery?

La creación de tareas con Celery se efectúa a través de decoradores, que permiten definir funciones que ejecutarán tareas asíncronas.

from flask import Flask, request, jsonify
import json

@app.task
def registrar_comando(comando):
    # Conexión a la base de datos
    conn = sqlite3.connect('comandos.db')
    cursor = conn.cursor()
    # Lógica para registrar el comando
    cursor.execute("SELECT * FROM registros WHERE comando=?", (comando,))
    registro = cursor.fetchone()
    if registro:
        cursor.execute("UPDATE registros SET contador = contador + 1 WHERE comando=?", (comando,))
    else:
        cursor.execute("INSERT INTO registros (comando, contador) VALUES (?, 1)", (comando,))
    conn.commit()
    conn.close()

¿Qué precauciones tomar al manejar credenciales?

Al trabajar con RabbitMQ y Celery, se debe asegurar la protección de información sensible como contraseñas y nombres de usuario. Usa archivos de configuración .env y evita hardcodear valores directamente en el código.

¿Cómo ejecutar y probar la aplicación?

Finalmente, arrancar la aplicación es sencillo con Celery. Utiliza comandos de Celery para iniciar trabajadores y procesa los eventos que llegan:

celery -A tasks worker --loglevel=info

Esto levantará un worker que estará listo para recibir tareas.

¿Qué beneficios trae el uso de Celery y RabbitMQ?

La principal ventaja de utilizar Celery junto con RabbitMQ es la capacidad de desacoplar procesos largos o asíncronos del flujo principal de un programa. Esto permite mejorar la virtualización de cargas de trabajo pesadas y optimiza el rendimiento y la eficiencia de una aplicación.

Anímate a seguir explorando en esta línea de desarrollo, ya que Celery y RabbitMQ son herramientas poderosas en el manejo de tareas distribuidas y asíncronas que pueden elevar tus proyectos al siguiente nivel.