2014-01-18 69 views
8

我是Azure服務總線的新手,已經創建了成功的poc,用於創建主題和單獨的訂戶應用程序以接收其消息。Azure服務總線 - 訂戶可以獨立訂閱訂閱並共享相同的消息?

根據這篇文章,我引用: 「一個主題可以有與之相關的高達2000個訂閱,每個被髮送到話題的一個或多個用戶可以單獨訂閱的所有消息的獨立副本。訂閱和競爭來自它的消息。「

http://convective.wordpress.com/2011/06/08/windows-azure-appfabric-service-bus-queues-and-topics/

我有興趣做的是擴大這一多個應用程序獨立訂閱同一主題,但不是他們競爭

我目前的poc有一個發件人和兩個單獨的應用程序訂閱相同的主題和訂閱。我看到的行爲是,如果我從發件人發佈一條消息,兩個正在運行的訂閱應用程序中的任何一個都會收到它;但不是其他。

我的問題是,如果多個獨立的應用程序可以接收相同的主題消息?任何建議將不勝感激!

回答

18

當您創建對主題的訂閱時,它具有特定的訂閱名稱。任何用戶然後開始爲該訂閱名稱請求消息將爭用該訂閱上的消息。如果您希望獨立應用程序分別接收發送給主題的消息副本,則每個應用程序都必須創建自己的主題訂閱。您幾乎可以將每個訂閱視爲一個隊列,讓它自己被該主題提供。

我給的例子是一所大學。主題是「新生」,學院內的每個部門都希望收到新學生的留言副本。因此每個部門都會擁有自己的訂閱。會有「音樂」,「比林斯」,「科學」,「數學」訂閱等,他們每個人都訂閱新學生主題。通過這種方式,每個部門都會收到新學生信息的副本,甚至可以根據需要過濾他們關心的事情。如果部門在處理這些問題時落後於他們,他們可以使用他們的訂閱名稱來啓動處理器的更多實例,從而在理論上增加其吞吐量,因爲更多的消費者然後在其訂閱中競爭消息。

因此,在您的示例中,每個應用程序都需要創建它自己的訂閱,或者分配一個唯一的訂閱以從啓動時開始提取。請注意,如果讓應用程序生命週期決定訂閱的生命週期(意思是在應用程序啓動時創建訂閱並在應用程序關閉時將其銷燬),則需要注意的是,如果沒有活動訂閱,則發送到主題的消息會簡單地丟失。但是,您可以創建一個只接收未傳遞給任何其他訂閱的郵件的全部訂閱。這真的取決於你想要完成什麼。

+0

嗨,MikeWo,謝謝你的解釋。 – Heretix

+1

@mikewo,當你說「如果沒有活動的訂閱,那麼發送到主題的消息就會丟失」,這不取決於消息的生存時間嗎?即使沒有活動的訂閱並且向該主題添加了消息,在消息過期之前如果應用程序訂閱了該主題,該怎麼辦?它會不會收到它?感謝這篇文章。這非常有幫助。 –

+1

@NoelAbrahams號碼如果沒有訂閱並且提交了一條消息給該主題,則系統假定沒有人關心並且不保留該消息。消息的到期時間是在將它傳遞給關心的隊列/訂閱時。生成隊列或主題消息的默認時間是Timespan.MaxValue,因此在理論上,如果它按照您詢問的方式工作,那麼它們將一直存在,直到有人訂閱它們。 – MikeWo