2012-11-02 103 views
6

我想到的情景是:服務總線用於實例間通信,因此每個服務實例的訂閱都是唯一的。最終的結果是,如果一個實例沒有正常關閉,它的訂閱不會被刪除。自動過期孤立訂閱(Azure ServiceBus消息訂閱客戶端)

當一個服務實例「死亡」並重新啓動時,訂閱的以前的內容是不相關的,可以被丟棄。

那麼,有沒有辦法設置服務總線訂閱的「生存時間」或模擬類似的東西,而不必訴諸於一些自定義的孤立檢測機制?

回答

4

確切功能位於下一個版本的待辦事項中。也就是說,在azure中,您可以使用來自角色環境的實例id來創建訂閱的名稱,從而使重新啓動的實例重新使用訂閱。實例ID名稱很穩定。

編輯:其特點是AutoDeleteOnIdle https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptiondescription

+0

謝謝你的回答,克萊門斯。使用實例ID來創建預訂名稱正是我們正在做的,但是仍然有相當多的垃圾留在所有的調試會話中,而使用PID號碼生成開發結構實例名稱。 –

+1

@Clemens任何想法,當這可能被釋放? –

+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

它非常容易使用(見下面的例子)。不幸的是,即使您有一些進程正在等待消息(根據Azure Servicebus AutoDeleteOnIdle),如果沒有爲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);