RabbitMQ: Mit Python eine Verbindung zu RabbitMQ herstellen

Diese Dokumentation ist Teil des Erste Schritte-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Wie Sie Stackhero für RabbitMQ nutzen.

Im Folgenden zeigen wir Ihnen, wie Sie Ihre Python-Anwendung mit RabbitMQ verbinden, indem Sie die Aio Pika Bibliothek verwenden. In den meisten Fällen müssen Sie lediglich die AMQPS-URL für eine sichere Verbindung angeben:

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

Hier ein vollständiges Beispiel, das zeigt, wie Sie eine sichere Verbindung zu RabbitMQ aufbauen, einen Channel erstellen und eine einfache Queue deklarieren. Dies ist eine gute Möglichkeit, Ihre Konfiguration zu überprüfen:

import asyncio
import logging
import aio_pika

async def main() -> None:
    # Wenn Sie Debug-Logs sehen möchten, können Sie die nächste Zeile auskommentieren
    # 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())

Wenn Sie beim Verbindungsaufbau mit Python folgenden Fehler erhalten:

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

bedeutet dies in der Regel, dass auf Ihrem System das Let's Encrypt CA-Zertifikat fehlt. Um das Problem zu beheben, installieren Sie das CA-Zertifikate-Paket für Ihr Betriebssystem:

  1. Unter Ubuntu/Debian können Sie folgenden Befehl ausführen:

    sudo apt install ca-certificates
    
  2. Unter Alpine Linux führen Sie aus:

    apk add ca-certificates
    

Falls Sie diese Befehle nicht nutzen können, besteht die Möglichkeit, das CA-Zertifikat manuell zu installieren:

  1. Laden Sie das Let's Encrypt CA-Zertifikat von https://letsencrypt.org/certs/isrgrootx1.pem herunter.

  2. Anschließend können Sie in Ihrem Python-Code die Verbindung zu RabbitMQ herstellen, indem Sie die CA-Zertifikatdatei angeben:

    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
    )
    

Hier ein vollständiges Beispiel, wie Sie das Let's Encrypt CA-Zertifikat für sichere Verbindungen nutzen:

import asyncio
import logging
import ssl
import aio_pika

async def main() -> None:
    # Um Debug-Logs zu aktivieren, können Sie diese Zeile auskommentieren
    # logging.basicConfig(level=logging.DEBUG)

    ssl_context = ssl.create_default_context()
    # Laden Sie das heruntergeladene Let's Encrypt CA-Zertifikat
    # Zum Beispiel: 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())