2012-11-02 8 views
6

Lo scenario che ho in mente è questo: il bus di servizio viene utilizzato per la comunicazione da istanza all'istanza, quindi una sottoscrizione è univoca per istanza di servizio. Il risultato finale è che se un'istanza non si chiude con grazia, la sua iscrizione non viene cancellata.Sottoscrizione orfana con scadenza automatica (Azure ServiceBus Messaging SubscriptionClient)

Quando un'istanza di servizio "muore" e si riavvia, i contenuti precedenti dell'abbonamento sono irrilevanti e possono essere scartati.

Quindi, c'è un modo per impostare un "time to live" per l'abbonamento al bus di servizio o simulare qualcosa di simile, senza dover ricorrere a qualche meccanismo di rilevamento orfano personalizzato?

risposta

4

quella funzione esatta è nel backlog per una delle prossime versioni. Detto questo, in azzurro è possibile utilizzare l'id-id per l'ambiente di ruolo per creare il nome dell'abbonamento e quindi avere un'istanza di riavvio per riutilizzare un abbonamento. i nomi dell'istanza-id sono stabili.

Edit: La caratteristica è AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription

+0

Grazie per la risposta, Clemens. Usare l'ID istanza per creare i nomi delle sottoscrizioni è esattamente quello che stiamo facendo, ma c'è ancora un bel po 'di spazzatura da tutte le sessioni di debug con i nomi delle istanze di fabric di sviluppo generati usando i numeri PID. –

+1

@Clemens qualche idea quando questo potrebbe essere rilasciato? –

+0

Sto anche cercando quando questo potrebbe essere rilasciato. Ho un usecase simile per gli abbonamenti Silverlight per cliente. Potrebbe esserci un'opzione per eseguire il cleanup se si conoscono i nomi degli argomenti cercando le sottoscrizioni stantie. : http://stackoverflow.com/questions/15871119/cleaning-up-stale-azure-service-bus-topic-subscriptions – kjsteuer

0

ho avuto lo stesso identico problema, anteprima solving è stato rilasciato all'inizio del 2013: http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.autodeleteonidle.aspx

E 'molto facile da usare (vedi esempio sotto). Purtroppo sembra che l'abbonamento scada se non è stato pubblicato alcun messaggio per il periodo AutoDeleteOnIdle, anche se è in attesa di qualche processo per i messaggi (secondo Azure Servicebus AutoDeleteOnIdle).

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

L'avvio con Azure SDK 2.0 funziona come previsto.

Inoltre, contrariamente ad altri report, nei miei test, l'abbonamento non viene cancellato fintanto che un ricevitore in attesa sta ascoltando quell'abbonamento.

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