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())
Foutmelding unable to get local issuer certificate oplossen
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:
-
Op Ubuntu/Debian voert u uit:
sudo apt install ca-certificates -
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:
-
Download het Let's Encrypt CA-certificaat van https://letsencrypt.org/certs/isrgrootx1.pem.
-
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())