簡體   English   中英

Azure 服務總線隊列與主題(發布/訂閱)

[英]Azure Service Bus Queues vs. Topics (Pub/Sub)

需要一些架構指導。 我有一組執行各種功能的無狀態服務。 我的架構允許每個服務的多個副本同時運行(因為它們是無狀態的),允許我:

  1. 根據需要擴展以處理更大的工作負載
  2. 具有容錯性(如果服務的一個實例失敗,沒有問題,因為會有其他人來承擔這項工作)。

但是,我不想重復工作。

如果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模式下獲取消息。 但是,如果涉及多個訂閱者(服務),則只有一個訂閱者能夠鎖定消息並訪問它。 對於其他訂閱者,該消息將不可見。 您不能有一個服務獲得鎖而其他服務仍然收到消息的情況。

Azure function 觸發器將提供您正在尋找的所有東西。

如果您沒有利用服務總線的任何高級排隊功能,那么我建議您查看存儲隊列以節省一些錢。

如果您需要服務總線,那么您可以使用服務總線觸發器

希望有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM