В моем проекте я пытаюсь запустить REST API (построенный с помощью FastAPI и работающий с Hypercorn), дополнительно я хочу, чтобы при запуске также запускался потребитель RabbitMQ (с aio_pika):
Aio Pika предлагает надежное соединение, которое автоматически восстанавливается в случае сбоя. Если я запускаю приведенный ниже код с hypercorn app:app
, потребитель и остальной интерфейс запускаются правильно, но переподключение от aio_pika больше не работает. Как я могу заархивировать рабочий стабильный RabbitMQ Consumer и RestAPI в двух разных процессах (или потоках?). Моя версия Python — 3.7. Обратите внимание, что на самом деле я разработчик Java и Go, если мой подход не соответствует пути Python :-)
@app.on_event("startup")
def startup():
loop = asyncio.new_event_loop()
asyncio.ensure_future(main(loop))
@app.get("/")
def read_root():
return {"Hello": "World"}
async def main(loop):
connection = await aio_pika.connect_robust(
"amqp://guest:[email protected]/", loop=loop
)
async with connection:
queue_name = "test_queue"
# Creating channel
channel = await connection.channel() # type: aio_pika.Channel
# Declaring queue
queue = await channel.declare_queue(
queue_name,
auto_delete=True
) # type: aio_pika.Queue
async with queue.iterator() as queue_iter:
# Cancel consuming after __aexit__
async for message in queue_iter:
async with message.process():
print(message.body)
if queue.name in message.body.decode():
break
@app.on_event("startup") def startup(): print("jdklasjdlas") loop = asyncio.get_event_loop() asyncio.ensure_future(main(loop))
Спасибо за вашу помощь. - person ghovat   schedule 09.12.2019