簡體   English   中英

如果設置了AutoDeleteOnIdle,服務總線是否刪除沒有過濾器/規則的主題訂閱?

[英]Does Service Bus Delete Topic Subscriptions with No Filters/Rules if AutoDeleteOnIdle is Set?

下午好。

我們使用Service Bus Topics作為pub / sub系統的引擎。 我們的邏輯涉及我們的C#服務連接到訂閱主題。 我們刪除$ Default(TrueFilter)並將AutoDeleteOnIdle設置為5分鍾。

由於系統的其他部分需要的東西,他們告訴我們的C#服務,“我需要這個。” 然后,C#服務添加新規則(通常是CorrelationFilter)。

由於系統的相同部分不再需要東西,他們告訴我們的C#服務,“我不再需要它了。” 然后,C#服務刪除相應的規則。

因此,主題訂閱仍然可以連接(完成SubscriptionClient對象),但根本沒有規則。

問題

訂閱“消失”,我無法理解為什么。 畢竟,我有一個訂閱了SubscriptionClient實例和一個回調函數的活動訂閱。

然后,當我使用我的SubscriptionClient對象進行操作時,它會拋出MessagingEntityNotFoundException。

在我看來,服務總線是隨機和隨意丟失或刪除我的訂閱。

服務總線對“空閑”的定義

我的理解是,只要存在與訂閱的活動連接(在我的情況下,通過SubscriptionClient實例),訂閱就不是“空閑”。 即使沒有感興趣的消息通過,它仍然沒有空閑,因此仍然沒有被刪除。 如果一天后收到消息,則SubscriptionClient實例將接收該消息。

這是我對系統中不動態添加/刪除規則的其他部分的經驗。 它運作得很好。

但后來我開始疑惑:

盡管與訂閱有連接,Service Bus是否將我的訂閱視為空閑,因為它沒有規則,因此無法接收消息? 然后Service Bus會遵循AutoDeleteOnIdle屬性並將其刪除嗎?

如果以上是真的那么會添加一個FalseFilter,因為$ Default保持訂閱活着嗎?

任何見解和幫助將是最受歡迎的。

非常感謝 - 肖恩

更新

我在WinForms應用程序中進行了初步測試,似乎服務總線出現了根本性的錯誤。 或者,至少,我們的服務總線實例。

我有17個主題,如下:

  • d860ffbe-e9c6-4ede-b6e9-959be4373128 /通知-0
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 /通知-1
  • ......(你明白了)
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 /通知-E
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 /通知-F
  • d860ffbe-e9c6-4ede-b6e9-959be4373128 /通知根

notify-root將收到的所有消息轉發給其他通知主題。 我們這樣做是為了分片。

所以...

我在0到f主題的每一個上創建了3個訂閱:

  • 沒有規則(我刪除了$ Default)
  • TrueFilter(我保留了$ Default)
  • FalseFilter(我在創建訂閱時將默認過濾器設置為FalseFilter)

我為這48個訂閱中的每一個創建了一個SubscriptionClient實例,並將實例保存在內存中。 我還使用OnMessageAsync方法傳入一個回調,告訴我何時寫入消息。

每個訂閱的AutoDeleteOnIdle都設置為TimeSpan.FromMinutes(5)。

我每1分鍾遍歷我的主題,訂閱和規則,以查看訂閱和規則何時出現和消失。

最后,我在notify-root上每隔1分鍾發布一條消息。

使用TrueFilter的16個訂閱中的每一個每隔一分鍾收到一條消息,並按預期在我的WinForms應用程序上顯示它。

在5分鍾標記處,Service Bus會自動刪除我在0,1,2,4,5,6,B,C和F結尾的主題的所有訂閱。

服務總線刪除了這些訂閱,盡管它們在被刪除之前不會閑置並且在不到1分鍾內主動接收消息。

大約30分鍾后,以3,7,8,9,A和E結尾的主題仍在接收消息,沒有刪除訂閱的跡象。

此外,Service Bus沒有刪除由於沒有規則或沒有FalseFilter而未接收消息的某些訂閱。 SubscriptionClient實例確實通過OnMessageAsync連接了一個回調。 值得注意的是,那些沒有被刪除的主題與TrueFilter訂閱相同,但也沒有被刪除。

似乎它正在刪除某些主題的訂閱,盡管有活動而不是其他主題。

我重復了測試,這是完全相同的主題,刪除了他們的訂閱(盡管有活動)。

一旦我停止發布,Service Bus在5分鍾后刪除了剩余的訂閱(正如預期的那樣)。

我將用17個不同的主題重復測試。

事實證明,AutoDeleteOnIdle的工作方式完全符合我的想法。

只要主題訂閱具有連接,就不應刪除它。 是否沒有規則,FalseFilter或沒有消息發布並不重要。 只要您有活動連接並且您當前正在嘗試使用OnMessage(),OnMessageAsync(),Receive()或ReceiveAsync()來獲取消息,那么訂閱不會處於空閑狀態且不會被刪除

但是,我們的服務總線主題訂閱仍然從一些主題中消失。 它們仍然在AutoDeleteOnIdle時刪除。 我無法在我的開發盒上重現這個問題。

過去幾個月我們在生產環境中遇到了這個問題,而且情況變得更糟。 我們以為我們做錯了什么。

碰巧的是,微軟今天向我證實他們的西美2區有這個問題。 沒有其他地區受到影響。 MS尚未確認為什么會發生這種情況,發生了多長時間或需要多長時間才能糾正。

這是我想象的最后一件事。 我以為我做錯了什么。

最令人不安的是,這個問題存在多久沒有被微軟發現。

希望它很快就會被修補。

如果其他人遇到Service Bus訂閱消失或被刪除盡管有活動,我建議像我一樣建立測試。 如果測試的行為不符合預期,請與Microsoft聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM