RabbitMQ: Utilizar Python para se ligar ao RabbitMQ
Esta documentação faz parte do guia Primeiros passos. Consulte o guia completo aqui: Como utilizar o Stackhero para RabbitMQ.
Vamos mostrar-lhe como pode ligar a sua aplicação Python ao RabbitMQ utilizando a biblioteca Aio Pika. Na maioria dos casos, só precisa de fornecer o URL AMQPS para estabelecer uma ligação segura:
connection = await aio_pika.connect_robust(
"amqps://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<AMQP_PORT_TLS>",
)
Segue-se um exemplo completo que demonstra como estabelecer uma ligação segura ao RabbitMQ, criar um canal e declarar uma fila básica. Esta é uma excelente forma de verificar a sua configuração:
import asyncio
import logging
import aio_pika
async def main() -> None:
# Se quiser ver logs de debug, pode descomentar a linha seguinte
# 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())
Como resolver o erro unable to get local issuer certificate
Se encontrar um erro semelhante ao seguinte ao ligar-se a partir do Python:
aiormq.exceptions.AMQPConnectionError: [Errno 5] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)
isto normalmente significa que o certificado da autoridade certificadora (CA) Let's Encrypt não está instalado no seu sistema. Para resolver, instale o pacote de certificados CA adequado ao seu sistema operativo:
-
Em Ubuntu/Debian, execute:
sudo apt install ca-certificates -
Em Alpine Linux, execute:
apk add ca-certificates
Se não conseguir utilizar estes comandos, pode sempre instalar o certificado CA manualmente:
-
Faça o download do certificado CA Let's Encrypt em https://letsencrypt.org/certs/isrgrootx1.pem.
-
Depois, pode ligar-se ao RabbitMQ no seu código Python especificando o ficheiro do 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 )
Segue um exemplo completo utilizando o certificado CA Let's Encrypt para ligações seguras:
import asyncio
import logging
import ssl
import aio_pika
async def main() -> None:
# Para ativar logs de debug, pode descomentar esta linha
# logging.basicConfig(level=logging.DEBUG)
ssl_context = ssl.create_default_context()
# Carregue o certificado CA Let's Encrypt que descarregou
# Por exemplo: 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())