[英]Azure Service Bus Queues vs. Topics (Pub/Sub)
需要一些架構指導。 我有一組執行各種功能的無狀態服務。 我的架構允許每個服務的多個副本同時運行(因為它們是無狀態的),允許我:
但是,我不想重復工作。
如果Service A, Instance 1已經承擔了 Job ABC,我不希望Service A, Instance 2承擔同樣的工作。 所以,我可以通過使用 Azure 服務總線隊列來避免這個問題。 只有單個工作人員會從隊列中獲取特定項目,並且只會被重新分配給另一個工作人員,如果工作人員沒有在設定的時間內將其標記為完成。
那么主題(Pub/Sub)的合適用例是什么? 似乎如果我曾經擁有同一服務的多個副本,我必須依賴隊列。 那正確嗎?
換一種方式問,有沒有辦法使用 Azure 服務總線或類似產品/服務中的主題但避免重復工作? 此外,如果在使用主題時有辦法鎖定消息(在短時間內),是否可以將該消息鎖定到服務 A 的一個實例(因此服務 A 的其他實例將無法訪問它) 但是消息會廣播到Service B、Service、C等?
有沒有辦法使用 Azure 服務總線或類似產品/服務中的主題,但避免重復工作?
就在這里。 基本上,您需要將每個訂閱用作隊列。 您需要做的是定義適當的過濾器,以便將一種消息發送到單個訂閱(這樣它充當隊列)並讓多個偵聽器(在您的情況下為服務實例)僅偵聽特定訂閱。
此外,如果在使用主題時有辦法鎖定消息(在短時間內),是否可以將該消息鎖定到服務 A 的一個實例(因此服務 A 的其他實例將無法訪問它) 但是消息會廣播到Service B、Service、C等?
當然可以鎖定消息。 為此,您需要在Peek-Lock
模式下獲取消息。 但是,如果涉及多個訂閱者(服務),則只有一個訂閱者能夠鎖定消息並訪問它。 對於其他訂閱者,該消息將不可見。 您不能有一個服務獲得鎖而其他服務仍然收到消息的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.