2012-09-18 72 views
2

由於Azure服務總線將隊列或主題的最大併發連接數限制爲100,是否有一種方法可用於查詢我們的隊列/主題確定有多少個併發連接?Azure服務總線 - 確定活動連接數(主題/隊列)

我們知道我們可以捕獲節流事件,但是非常希望採用主動方法,在系統處於重負載的情況下,我們可以主動增加或減少隊列/主題的數量。

此處的用例是一個等待回覆消息的進程,其中回覆來自長時間運行的進程,訂閱正在使用關聯篩選器來促進發布服務器與訂閱服務器之間的雙向通信。因此,我們必須有一個BeginReceive()函數來等待響應,並且每個這樣的發佈服務器都將在等待時間內消耗一個連接。系統已經在多個主題之間平衡了負載,但是我們需要一種主動創建多少個主題的方式,這樣我們就不會經常受到限制,但同時也沒有多餘的主題用於此目的。

回答

3

我不相信現在可以查詢聽衆的數量。我認爲用戶對象在理論上也是如此,如果每個主題有多達2000個訂閱者,並且每個用戶允許多達100個連接,那麼很可能存在連接。我們只需要記住用戶是合作的(每個用戶都可以獲得所有消息的副本),子載波上的接收者具有競爭力(只有一個人可以獲得)。

當您開始運行> 1,000位訂閱者時,我也看到了未確認的性能延遲報告,因此請確保您測試此方案。

但是...考慮到你的情況,我推斷性能時間可能不是最大的因素(你已經有很長的運行流程了)。因此,在工作流中引入幾秒鐘的時間可能不會很關鍵。如果是這樣的話,我會將BeginRecieve的超時設置爲相當短的時間(幾秒),並在兩次嘗試之間存在睡眠/等待延遲。這使其他聽衆也有機會獲得消息。我們也可能想考慮一種方法,我們試圖接收多個消息,然後將它們分配給其他進程進行處理(在這種情況下是相關聯的?)。

引發一些想法。

+0

我真的很喜歡你的想法,在BeginReceive嘗試保持併發連接數減少之間有一些睡眠/等待延遲。在這種情況下,這將是完美的,因爲這些過程大部分時間將是30秒到5分鐘。我們可能需要考慮每次睡眠/等待增加的情況,達到設定的限制。這裏的邏輯可能與我們等待的時間越長有關,這是一個更長的過程的可能性越高,等等。這將使最長的人聽得更少,睡得更多。我喜歡! –

+1

這是一種「後退」模式,而且是相當常見的事情。如果它適合你的情況,我肯定會鼓勵使用。 :) – BrentDaCodeMonkey

+0

你知道這種模式是否會導致額外費用? IIRC,存儲隊列收取讀取費用,不管是否傳遞消息。相比之下,服務總線似乎只收取發送,發送或刪除的消息等費用。每個新連接都要收取一筆交易費用嗎? –