2012-11-02 4 views
6

Сценарий, который я имею в виду, таков: служебная шина используется для связи между экземплярами, поэтому подписка уникальна для каждого экземпляра службы. Конечным результатом является то, что если экземпляр не закрывается изящно, его подписка не удаляется.Авто-expire потерянная подписка (Azure ServiceBus Messaging SubscriptionClient)

Когда экземпляр службы «умирает» и перезапускается, предыдущее содержимое подписки не имеет значения и может быть отброшено.

Итак, есть ли способ установить «время жить» для подписки на служебную шину или имитировать что-то подобное, не прибегая к какому-то специальному механизму обнаружения сирот?

ответ

4

эта точная функция находится в отставании для одного из следующих выпусков. что в лазурном режиме вы можете использовать идентификатор экземпляра для среды ролей для создания имени вашей подписки и, таким образом, перезапустить экземпляр повторно использовать подписку. имена экземпляров-экземпляров стабильны.

Edit: функция AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription

+0

Благодарим вас за ответ, Клеменс. Использование Идентификатора экземпляра для создания имен подписей - это именно то, что мы делаем, но все еще остается немного мусора, оставшегося от всех сеансов отладки, с именами экземпляров структуры разработки, сгенерированными с использованием номеров PID. –

+1

@ Признать любую идею, когда это может быть выпущено? –

+0

Я также ищу, когда это может быть выпущено. У меня есть аналогичная услуга для подписчиков на подписчиков silverlight на каждого клиента. Возможно, вы захотите запустить собственную очистку, если знаете имена тем, просматривая устаревшие подписки. : http://stackoverflow.com/questions/15871119/cleaning-up-stale-azure-service-bus-topic-subscriptions – kjsteuer

0

У меня была точно такая же проблема, предпросмотр решение было выпущено начало 2013: http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.autodeleteonidle.aspx

Это очень проста в использовании (смотрите пример ниже). К сожалению, кажется, что срок подписки истекает, если нет сообщения, опубликованного для периода AutoDeleteOnIdle, даже если у вас есть процесс, ожидающий сообщений (согласно Azure Servicebus AutoDeleteOnIdle).

NamespaceManager manager=NamespaceManager.CreateFromConnectionString(serviceBusConnectionString); 
if(!manager.SubscriptionExists(topic,subscriptionName)) 
{ 
    manager.CreateSubscription(new SubscriptionDescription(topic,subscriptionName) { 
     AutoDeleteOnIdle=TimeSpan.FromDays(2) 
    }); 
} 
6

Начиная с Azure SDK 2.0 это работает должным образом.

Кроме того, вопреки другим отчетам, при тестировании подписка не удаляется, если есть ожидающий приемник, прослушивающий эту подписку.

var description = new SubscriptionDescription(topicPath, subscriptionId); 
description.AutoDeleteOnIdle = TimeSpan.FromSeconds(600); 
namespaceManager.CreateSubscription(description); 

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

  • Нет связанных вопросов^_^