假設我有一個球隊,一個主題,一個子球。和三個客戶訂閱。
我發送消息。
第一個客戶端收到一條消息並調用complete()動作。
第二個客戶端會收到一條消息嗎?
如果有客戶訂閱了它,該怎麼辦?
問題是 - 什麼時候將消息完全從queve/topic/subscription中刪除?
P.S. 「一對一」的案例很清楚。
假設我有一個球隊,一個主題,一個子球。和三個客戶訂閱。
我發送消息。
第一個客戶端收到一條消息並調用complete()動作。
第二個客戶端會收到一條消息嗎?
如果有客戶訂閱了它,該怎麼辦?
問題是 - 什麼時候將消息完全從queve/topic/subscription中刪除?
P.S. 「一對一」的案例很清楚。
我會建議您查看競爭消費者模式。 (https://msdn.microsoft.com/en-us/library/dn568101.aspx?f=255&MSPPError=-2147217396)。
您可以有許多角色(即Azure Worker Role)檢查隊列中的消息(競爭消費者),並在處理時專門鎖定它們。每個角色都在爲消息而奮鬥,而第一個抓住它的人(偶然),目前它是「獨佔」的。如果獲取並處理消息的消費者成功,則運行Complete()方法,否則執行Abandon(消息)。 Complete()完成了它,並且Abandon將它拋回到競爭消費者的狂熱中。如果你身體健康,你甚至可以再次抓住它!
您可以在Azure管理門戶中設置死信息參數,以確定可以爲其他用戶重新引入的次數。在某些情況下,事情不能正常工作,所以殺掉消息以便其他消息可以繼續暢通無阻。
讓我知道你是否有更具體的需求。很樂意提供幫助。這種模式非常有效。
最要好的問候...