Python - 从Azure Service Bus主题接收非常慢

时间:2015-06-22 20:15:22

标签: python azure servicebus

我正在四处寻找家庭自动化,我计划使用Azure Service Bus作为我的核心"用于消息处理。使用.NET SDK,一切都运行良好,足够快(发送+接收的毫秒数)。但是,我现在正在使用" azure.servicebus"使用Python的模块(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是真是假,但行为是一样的。

有没有其他人能够获得这种稳定/接近的瞬间?

1 个答案:

答案 0 :(得分:2)

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

ServiceBus队列是存储队列的替代方案,在需要更高级消息传递功能的情况下可能很有用(更大的消息大小,消息排序,单一操作破坏性读取,预定传递)using push-style delivery (using long polling). < / em>的

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

  

请注意,在撰写本文时,Proton-C中的SSL支持是   仅适用于Linux操作系统。因为Microsoft Azure   Service Bus需要使用SSL,Proton-C(和语言)   绑定)只能用于从中访问Microsoft Azure Service Bus   Linux此时。在Windows上使用SSL启用Proton-C的工作是   正在进行中,请经常查看更新。