Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 持续接收来自Azure ServiceBus的消息_Python_Azure_Asynchronous_Azureservicebus_Azure Servicebus Topics - Fatal编程技术网

Python 持续接收来自Azure ServiceBus的消息

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:建议在每次出现消息时触发函数,但我不确定如何正确执行,因为我几乎没有使用异步函数的经验。熟悉异步/服务总线的人能解释一下代码应该如何格式化吗

根据Azure ServiceBus文档:

ServiceBusReceiver类定义了一个高级接口,用于从Azure服务总线队列或主题订阅接收消息。用于接收消息的两个主要通道是receive(),用于对消息发出单个请求;对于receiver:中的消息,
异步用于持续接收传入消息

我一直试图在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你完成了吗?你选择了什么方法?