RabbitMQ: Utilizzare Python per connettersi a RabbitMQ
Questa documentazione fa parte della guida Guida introduttiva. Consulta la guida completa qui: Come utilizzare Stackhero per RabbitMQ.
Vediamo insieme come collegare la vostra applicazione Python a RabbitMQ utilizzando la libreria Aio Pika. Nella maggior parte dei casi, è sufficiente fornire l'URL AMQPS per stabilire una connessione sicura:
connection = await aio_pika.connect_robust(
"amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>",
)
Ecco un esempio completo che mostra come stabilire una connessione sicura a RabbitMQ, creare un canale e dichiarare una coda di base. Questo è un ottimo modo per verificare la vostra configurazione:
import asyncio
import logging
import aio_pika
async def main() -> None:
# Se desiderate visualizzare i log di debug, potete decommentare la riga seguente
# 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())
Gestire l'errore unable to get local issuer certificate
Se riscontrate un errore di questo tipo durante la connessione da Python:
aiormq.exceptions.AMQPConnectionError: [Errno 5] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)
significa generalmente che il certificato CA Let's Encrypt manca sul vostro sistema. Per risolvere, installate il pacchetto dei certificati CA adatto al vostro sistema operativo:
-
Su Ubuntu/Debian, eseguite:
sudo apt install ca-certificates -
Su Alpine Linux, eseguite:
apk add ca-certificates
Se non potete utilizzare questi comandi, avete comunque la possibilità di installare manualmente il certificato CA:
-
Scaricate il certificato CA Let's Encrypt da https://letsencrypt.org/certs/isrgrootx1.pem.
-
Poi, potete collegarvi a RabbitMQ nel vostro codice Python specificando il file del certificato 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 )
Ecco un esempio completo che utilizza il certificato CA Let's Encrypt per connessioni sicure:
import asyncio
import logging
import ssl
import aio_pika
async def main() -> None:
# Per abilitare i log di debug, potete decommentare questa riga
# logging.basicConfig(level=logging.DEBUG)
ssl_context = ssl.create_default_context()
# Caricate il certificato CA Let's Encrypt che avete scaricato
# Ad esempio: 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())