2012-11-02 9 views
6

Das Szenario, das ich im Auge habe, ist dies: Service Bus wird für Instanz-zu-Instanz-Kommunikation verwendet, so ein Abonnement ist eindeutig pro Service-Instanz. Das Endergebnis ist, dass, wenn eine Instanz nicht ordnungsgemäß heruntergefahren wird, ihre Subskription nicht gelöscht wird.Abonnement automatisch ablaufen verwaiste (Azure ServiceBus Messaging SubscriptionClient)

Wenn eine Serviceinstanz "stirbt" und neu startet, sind vorherige Inhalte des Abonnements irrelevant und können verworfen werden.

Gibt es also eine Möglichkeit, eine "Lebensdauer" für das Service-Bus-Abonnement festzulegen oder etwas Ähnliches zu simulieren, ohne auf einen benutzerdefinierten Mechanismus zur Entdeckung von verwaisten Objekten zurückgreifen zu müssen?

Antwort

4

das genaue Feature ist im Rückstand für eine der nächsten Versionen. In azur können Sie die Instanz-ID der Rollenumgebung verwenden, um den Namen Ihrer Subskription zu erstellen und damit eine neu startende Instanz eine Subskription wiederverwenden zu lassen. Die Instanz-ID-Namen sind stabil.

Edit: Die Funktion ist AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription

+0

Vielen Dank für Ihre Antwort, Clemens. Die Verwendung von Instanz-ID zum Erstellen von Subskriptionsnamen ist genau das, was wir tun, aber es ist immer noch eine Menge Müll von allen Debug-Sitzungen übrig, wobei Entwicklungs-Fabric-Instanznamen unter Verwendung von PID-Nummern erzeugt werden. –

+1

@Clemens eine Idee, wann dies veröffentlicht werden könnte? –

+0

Ich suche auch, wann dies veröffentlicht werden könnte. Ich habe einen ähnlichen Anwendungsfall für Silverlight Client-Abonnements pro Client. Es könnte eine Option geben, die eigene Bereinigung durchzuführen, wenn Sie die Themennamen kennen, indem Sie nach veralteten Abonnements suchen. : http://stackoverflow.com/questions/15871119/cleaning-up-stale-azure-service-bus-topic-subscriptions – kjsteuer

0

ich genau das gleiche Problem hatte, Vorschau zu lösen es Anfang 2013 veröffentlicht wurde: http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.subscriptiondescription.autodeleteonidle.aspx

Es ist sehr einfach zu bedienen (siehe Beispiel unten). Leider scheint das Abonnement abgelaufen zu sein, wenn keine Nachricht für die AutoDeleteOnIdle-Periode veröffentlicht wurde, selbst wenn Sie einen Prozess für Nachrichten erwartet haben (gemäß Azure Servicebus AutoDeleteOnIdle).

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

Ab Azure SDK 2.0 funktioniert das wie erwartet.

Im Gegensatz zu anderen Berichten wird das Abonnement in meinen Tests auch nicht gelöscht, solange ein ausstehender Empfänger dieses Abonnement abhört.

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