RabbitMQ: Usar Python para conectarse a RabbitMQ

Esta documentación forma parte de la guía Primeros pasos. Consulte la guía completa aquí: Cómo utilizar Stackhero para RabbitMQ.

A continuación le mostramos cómo puede conectar su aplicación Python a RabbitMQ utilizando la librería Aio Pika. En la mayoría de los casos, solo necesita proporcionar la URL AMQPS para establecer una conexión segura:

connection = await aio_pika.connect_robust(
  "amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>",
)

Aquí tiene un ejemplo completo que muestra cómo establecer una conexión segura con RabbitMQ, crear un canal y declarar una cola básica. Es una excelente manera de verificar su configuración:

import asyncio
import logging
import aio_pika

async def main() -> None:
    # Si desea ver logs de depuración, puede descomentar la siguiente línea
    # logging.basicConfig(level=logging.DEBUG)

    connection = await aio_pika.connect_robust(
        "amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>"
    )

    async with connection:
        print("The connection worked!")
        channel = await connection.channel()
        await channel.set_qos(prefetch_count=10)
        queue = await channel.declare_queue("test_queue", auto_delete=True)

if __name__ == "__main__":
    asyncio.run(main())

Si encuentra un error como este al conectarse desde Python:

aiormq.exceptions.AMQPConnectionError: [Errno 5] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)

normalmente significa que a su sistema le falta el certificado CA de Let's Encrypt. Para solucionarlo, puede instalar el paquete de certificados CA correspondiente a su sistema operativo:

  1. En Ubuntu/Debian, ejecute:

    sudo apt install ca-certificates
    
  2. En Alpine Linux, ejecute:

    apk add ca-certificates
    

Si no puede utilizar estos comandos, también tiene la opción de instalar el certificado CA manualmente:

  1. Descargue el certificado CA de Let's Encrypt desde https://letsencrypt.org/certs/isrgrootx1.pem.

  2. Después, puede conectarse a RabbitMQ en su código Python especificando el archivo del certificado CA:

    import ssl
    
    ssl_context = ssl.create_default_context()
    ssl_context.load_verify_locations(cafile='isrgrootx1.pem')
    
    connection = await aio_pika.connect_robust(
      "amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>",
      ssl_context=ssl_context
    )
    

Aquí tiene un ejemplo completo utilizando el certificado CA de Let's Encrypt para conexiones seguras:

import asyncio
import logging
import ssl
import aio_pika

async def main() -> None:
    # Para habilitar los logs de depuración, puede descomentar esta línea
    # logging.basicConfig(level=logging.DEBUG)

    ssl_context = ssl.create_default_context()
    # Cargue el certificado CA de Let's Encrypt que ha descargado
    # Por ejemplo: wget https://letsencrypt.org/certs/isrgrootx1.pem
    ssl_context.load_verify_locations(cafile='isrgrootx1.pem')

    connection = await aio_pika.connect_robust(
        "amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>",
        ssl_context=ssl_context
    )

    async with connection:
        print("The connection worked!")
        channel = await connection.channel()
        await channel.set_qos(prefetch_count=10)
        queue = await channel.declare_queue("test_queue", auto_delete=True)

if __name__ == "__main__":
    asyncio.run(main())