Python - 从Azure服务总线主题接收非常慢

标签 python azure servicebus

我正在研究家庭自动化,并计划使用 Azure 服务总线作为消息处理的“核心”。使用 .NET SDK,一切都可以完美运行并且速度足够快(发送 + 接收仅以毫秒为单位)。然而,我现在使用 Python 的“azure.servicebus”模块(Raspberry Pi 上的 Debian),并且 receive_subscription_message 调用的速度远远不够快。它的变化范围从接近即时到落后一分钟。

我的代码如下:

from azure.servicebus import ServiceBusService, Message, Queue
bus_service = ServiceBusService(
    service_namespace='mynamespace',
    shared_access_key_name='Listener1',
    shared_access_key_value='...')
msg = bus_service.receive_subscription_message('messages', 'ListenerTest.py', peek_lock=True)
msg.delete()

我已经尝试过 peek_lock True 和 False,但行为是相同的。

还有其他人能够获得如此稳定/接近即时的效果吗?

最佳答案

请确保订阅中确实有消息,另请注意,.NET SDK 默认使用服务总线特定协议(protocol)而不是 http,但 Python SDK 使用 http 轮询(基本上检查订阅中是否有消息)偶尔订阅一次)。我们可以在 https://github.com/Azure/azure-sdk-for-python/blob/master/doc/servicebus.rst 找到简要信息:

ServiceBus 队列是存储队列的替代方案,在需要更高级消息传递功能(更大的消息大小、消息排序、单操作破坏性读取、计划传送)的情况下可能很有用,使用推送-样式传递(使用长轮询)。

根据我的理解,这可能可以解释为什么您会看到立即或长达一分钟收到的消息。根据您描述的行为,您可能想要使用 AMQP,它基于双向 TCP,因此不需要轮询。要使用 AMQP,您可能需要利用标准 Proton-Python 库,我建议您检查 https://msdn.microsoft.com/en-us/library/azure/jj841070.aspx sample 。但请注意该文章中的提示:

Note that at the time of this writing, the SSL support in Proton-C is only available for Linux operating systems. Because Microsoft Azure Service Bus requires the use of SSL, Proton-C (and the language bindings) can only be used to access Microsoft Azure Service Bus from Linux at this time. Work to enable Proton-C with SSL on Windows is underway so check back frequently for updates.

关于Python - 从Azure服务总线主题接收非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989043/

相关文章:

python - Excel 到 SQL 并处理重复值

python - 如何使类在 find 方法中表现得像 super

python - 使用 Pub/Sub 和 Dataflow 从单个 JSON 创建多行并将其插入到 BigQuery

python - 使用 python 的 bs4 的 HTML 选择器

通过 webhook Azure 启动/停止 VM

azure - 是否可以编辑部署在 Windows Azure 上的云应用程序的 web.config,而无需重新部署我的应用程序?

javascript - 设备架构中调用的遥测中的数组字段类型是什么?

Azure Function V2 值不能为空

java - 在 Android 上生成 Azure SAS token

c# - 在.Net core控制台应用程序中使用Azure服务总线