2016-06-29 50 views
0

我有一個場景,我是Azure服務總線中的主題和訂閱。該網站創建一個主題訂閱。當網站的另一個實例創建時,我想創建一個具有唯一名稱的新訂閱到同一主題。什麼是最好的方法。該網站作爲一個web應用程序在azure中託管。Azure服務總線唯一訂閱名稱縮小時

+0

什麼是用例?我不會推薦這樣做,因爲您將訂閱需要在網站實例死亡時清理。 – JTaub

+0

感謝Sean Feldman和JTaub,情景是當某個主題發佈消息時,Web應用程序從訂閱中讀取消息並使用signalR將消息推送到客戶端。這就是我考慮爲每個實例創建訂閱的原因,因爲每個實例都將擁有自己的一組客戶端。 – Suhumar

回答

1

Azure服務總線是一個代理,您的應用程序應該是一個競爭消費者(即多個實例的同一個隊列的提要,因爲這些只是您擴展的同一個Web應用程序的實例)。說,有時你需要實現一個像回調的機制,通常用於回傳給webapp的特定實例,一直到客戶端。爲此,我建議不要創建每個Web應用程序的訂閱而不是每個實例(可以使用WEBSITE_INSTANCE_ID作爲唯一訂閱ID來完成)。就像John所評論的那樣,每個實例的訂閱問題是,當您擴展時,與已取消供應的webapp實例的訂閱相關的消息將保留在未處理的代理上。更不用說,持續的橫向擴展將導致訂閱成爲孤兒,而不是清理。

另一種方法是每個webapp都有一個訂閱,並使用SignalR with a backplane之類的特定實例將這些事件分發給特定的實例,這是專門爲此目的而設計的。 SignalR有幾個背板實現(Redis,Azure ServiceBus,SQL Server)。

+0

感謝Sean Feldman和JTaub,情景是當某個主題發佈消息時,Web應用程序從訂閱中讀取消息並使用signalR將消息推送到客戶端。這就是我考慮爲每個實例創建訂閱的原因,因爲每個實例都將擁有自己的一組客戶端。但是根據肖恩的建議,我可以只訂閱一個主題,並使用SignalR底板來處理擴展情況。 – Suhumar

+0

如果遵循此路線,則應從訂閱中多次讀取消息。所以多個實例可以讀取消息並將其發送給客戶端。那麼,如何爲它設置計數以及何時將消息標記爲完成? – Suhumar

+0

您只能讀取一次信息並使用背板與signalR廣播。如果成功,則將ASB消息標記爲已完成。 –

相關問題