Python 持续接收来自Azure ServiceBus的消息
根据Azure ServiceBus文档: ServiceBusReceiver类定义了一个高级接口,用于从Azure服务总线队列或主题订阅接收消息。用于接收消息的两个主要通道是receive(),用于对消息发出单个请求;对于receiver:中的消息,Python 持续接收来自Azure ServiceBus的消息,python,azure,asynchronous,azureservicebus,azure-servicebus-topics,Python,Azure,Asynchronous,Azureservicebus,Azure Servicebus Topics,根据Azure ServiceBus文档: ServiceBusReceiver类定义了一个高级接口,用于从Azure服务总线队列或主题订阅接收消息。用于接收消息的两个主要通道是receive(),用于对消息发出单个请求;对于receiver:中的消息,异步用于持续接收传入消息 我一直试图在receiver:中使用消息的async for message:建议在每次出现消息时触发函数,但我不确定如何正确执行,因为我几乎没有使用异步函数的经验。熟悉异步/服务总线的人能解释一下代码应该如何格式化吗
异步用于持续接收传入消息
我一直试图在receiver:
中使用消息的async for message:
建议在每次出现消息时触发函数,但我不确定如何正确执行,因为我几乎没有使用异步函数的经验。熟悉异步/服务总线的人能解释一下代码应该如何格式化吗
编辑:让我提供更多的上下文。我正在创建一个python flask服务,在启动时,我需要它开始侦听关于主题/订阅名称的消息。每当它收到一条消息时,它都会执行一些代码,然后发送一条消息回来。所以如何在启动时启动异步侦听器,并让它在触发时执行一些代码?它还应该能够以非阻塞方式处理每条消息。因此,如果同时收到两条消息,则应同时处理这两条消息
注意:我无法使用Azure功能。假设您使用的是
主题订阅
,您可以使用以下代码:
#!/usr/bin/env python
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
"""
Example to show receiving batch messages from a Service Bus Subscription under specific Topic asynchronously.
"""
# pylint: disable=C0111
import os
import asyncio
from azure.servicebus.aio import ServiceBusClient
CONNECTION_STR = os.environ['SERVICE_BUS_CONNECTION_STR']
TOPIC_NAME = os.environ["SERVICE_BUS_TOPIC_NAME"]
SUBSCRIPTION_NAME = os.environ["SERVICE_BUS_SUBSCRIPTION_NAME"]
async def main():
servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR)
async with servicebus_client:
receiver = servicebus_client.get_subscription_receiver(
topic_name=TOPIC_NAME,
subscription_name=SUBSCRIPTION_NAME
)
async with receiver:
received_msgs = await receiver.receive_messages(max_message_count=10, max_wait_time=5)
for msg in received_msgs:
print(str(msg))
await receiver.complete_message(msg)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
完整教程:
此外,您还可以浏览这些示例(同步版本和异步版本):不太可能。说“你可以使用WebJobs”是非常开放的。“准确地说”如何?是的,我正在寻找一些牵手@singhh msftCool,看看Peter Pan关于“从Azure WebJob运行Python脚本”的一步一步的方法。上面的链接对你有帮助吗?对你有帮助吗?@JohnLexus你完成了吗?你选择了什么方法?