RabbitMQ: Python gebruiken om verbinding te maken met RabbitMQ

Deze documentatie maakt deel uit van de Aan de slag-gids. Bekijk de volledige gids hier: Hoe Stackhero gebruiken voor RabbitMQ.

Hier leggen we uit hoe u uw Python-applicatie kunt verbinden met RabbitMQ met behulp van de Aio Pika bibliotheek. In de meeste gevallen hoeft u alleen de AMQPS-URL op te geven voor een beveiligde verbinding:

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

Hieronder vindt u een volledig voorbeeld dat laat zien hoe u een beveiligde verbinding met RabbitMQ tot stand brengt, een channel aanmaakt en een eenvoudige queue declareert. Dit is een goede manier om uw setup te verifiëren:

import asyncio
import logging
import aio_pika

async def main() -> None:
    # Als u debuglogs wilt zien, kunt u de volgende regel deblokkeren
    # 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())

Als u bij het verbinden vanuit Python een foutmelding zoals deze krijgt:

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

betekent dit meestal dat het Let's Encrypt CA-certificaat op uw systeem ontbreekt. U kunt dit oplossen door het pakket met CA-certificaten voor uw besturingssysteem te installeren:

  1. Op Ubuntu/Debian voert u uit:

    sudo apt install ca-certificates
    
  2. Op Alpine Linux voert u uit:

    apk add ca-certificates
    

Als u deze commando's niet kunt gebruiken, kunt u het CA-certificaat ook handmatig installeren:

  1. Download het Let's Encrypt CA-certificaat van https://letsencrypt.org/certs/isrgrootx1.pem.

  2. Vervolgens kunt u in uw Python-code verbinding maken met RabbitMQ door het CA-certificaatbestand op te geven:

    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
    )
    

Hieronder vindt u een volledig voorbeeld waarbij het Let's Encrypt CA-certificaat wordt gebruikt voor een beveiligde verbinding:

import asyncio
import logging
import ssl
import aio_pika

async def main() -> None:
    # Om debuglogs te activeren, kunt u deze regel deblokkeren
    # logging.basicConfig(level=logging.DEBUG)

    ssl_context = ssl.create_default_context()
    # Laad het Let's Encrypt CA-certificaat dat u heeft gedownload
    # Bijvoorbeeld: 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())