2015-06-22 3 views
1

Я работаю с домашней автоматикой, и я планирую использовать Azure Service Bus в качестве своего «ядра» для обработки сообщений. С .NET SDK все работает отлично и достаточно быстро (миллисекунды для отправки + получения). Тем не менее, теперь я использую модуль «azure.servicebus» с Python (Debian на малине Pi), а вызов receive_subscription_message далеко не быстрый. Он колеблется от ближайшего момента до отставания в минуту.Python - получить от Azure Service Bus Тема очень медленная

Мой код выглядит следующим образом:

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

Пожалуйста, убедитесь, что в подписке есть действительно сообщения. Также имейте в виду, что .NET SDK по умолчанию использует специальный протокол Service Bus вместо http, но SDK Python использует HTTP-опрос (в основном проверьте, есть ли сообщения в подписке время от времени). Мы можем найти краткую информацию на https://github.com/Azure/azure-sdk-for-python/blob/master/doc/servicebus.rst:

ServiceBus Очередь является альтернативой хранения очередей, которые могут быть полезны в ситуациях, когда необходимы более продвинутые функции обмена сообщений (больших размеры сообщений, упорядочение сообщений, одним Отдел разрушительный читает, Запланированное доставка) using push-style delivery (using long polling).

По моему пониманию это может объяснить, почему вы видите сообщение, полученное мгновенно или до минуты. Основываясь на поведении, которое вы описали, вы можете использовать AMQP, основанный на двунаправленном TCP, и, следовательно, не требует опроса. Чтобы использовать AMQP, вы можете использовать стандартную библиотеку Proton-Python, я хотел бы предложить вам проверить https://msdn.microsoft.com/en-us/library/azure/jj841070.aspx на выборку. Но обратите внимание на советы из этой статьи:

Обратите внимание, что на момент написания этой статьи, поддержка SSL в Протон-С доступна только для операционных систем Linux. Поскольку для Microsoft Azure для служебной шины требуется использование SSL, Proton-C (и языковые привязки ) можно использовать только для доступа к Microsoft Azure Service Bus с Linux в настоящее время. Работа по включению Proton-C с SSL в Windows - , поэтому часто проверяйте обновления.

Смежные вопросы