Я пытаюсь читать сообщения из тем Azure ServiceBus с помощью async/await
, а затем пересылать содержимое другому приложению через HTTP. Мой код прост:
import asyncio
from aiohttp import ClientSession
from azure.servicebus.aio.async_client import ServiceBusService
bus_service = ServiceBusService(service_namespace=..., shared_access_key_name=..., shared_access_key_value=...)
async def watch(topic_name, subscription_name):
print('{} started'.format(topic_name))
message = bus_service.receive_subscription_message(topic_name, subscription_name, peek_lock=False, timeout=1)
if message.body is not None:
async with ClientSession() as session:
await session.post('ip:port/endpoint',
headers={'Content-type': 'application/x-www-form-urlencoded'},
data={'data': message.body.decode()})
async def do():
while True:
for topic in ['topic1', 'topic2', 'topic3']:
await watch(topic, 'watcher')
if __name__ == "__main__":
asyncio.run(do())
Я хочу искать сообщения (навсегда) из разных тем и, когда приходит сообщение, отправлять POST. Я импортирую пакет aio
из azure
, который должен работать асинхронно. После многих попыток единственное решение, которое я получил, это while True
и установка timeout=1
. Это не то, что я хотел, я делаю это последовательно.
azure-servicebus
версия 0.50.3
.
Это мой первый раз с async/await
, возможно, я что-то упускаю...
Есть какие-нибудь решения/предложения?