分割槽 Service Bus 佇列和主題

2021-06-18 23:54:40 字數 2825 閱讀 8211

編輯人員注釋:本文章由 windows azure service bus 團隊的二級專案經理 ruppert koch 撰寫。

上週,microsoft 發布了 azure sdk 2.2 和 service bus sdk 2.2。這兩種 sdk 都具有新的 service bus 功能,即分割槽實體。利用這些 sdk(或通過在您的 http 請求中指定 api-version=2013-10),可以在 azure service bus 上建立和使用分割槽佇列與主題,從而改進可靠性。與此同時,您還會發現,大多數用例中的最大訊息吞吐量有所提高。

分割槽佇列和主題是什麼?

傳統的佇列或主題由單個訊息**進行處理並儲存在乙個訊息貯存區中,而分割槽佇列或主題由多個訊息**進行處理並儲存在多個訊息貯存區中。這意味著某個分割槽佇列或主題的總吞吐量不再受單個訊息**或訊息貯存區效能的限制。此外,一旦某個訊息貯存區暫時中斷,也不會導致任何乙個分割槽佇列或主題不可用。

簡而言之,分割槽佇列或主題的工作原理如下:每個分割槽佇列或主題均由多個片段組成。每個片段儲存在不同的訊息貯存區中,並且由不同的訊息**進行處理。當乙個訊息傳送到某個分割槽佇列或主題時,service bus 會將該訊息分配給其中乙個片段。這一分配過程由 service bus 或傳送方指定的分割槽鍵隨機完成。如果客戶端要從分割槽佇列或分割槽主題的訂閱接收某個訊息,service bus 將檢查所有片段中的訊息。如果找到此類訊息,它將挑選其中乙個並將其傳遞給接收方。

啟用分割槽

有三種方法來建立分割槽佇列或主題。第一種方法是從您的應用程式建立佇列或主題。啟用分割槽,方法是將

queuedescription.enablepartitioning

或 topicdescription.enablepartitioning

屬性設定為true。這些標誌必須在建立佇列或主題時設定。不能對現有的佇列或主題更改此屬性。

或者,也可以在 visual studio 中建立分割槽佇列或主題。我們在 new queue 對話方塊和 new topic 對話方塊中新增了乙個新核取方塊 enable partitioning。

第三種方法是通過 windows azure 門戶。此功能需要等到下一次門戶更新時才能使用,計畫於幾天後推出該更新。

請注意,當前 azure service bus 的容量限制為每個命名空間僅容納 100 個分割槽佇列或主題。此外,分割槽佇列和主題僅在 azure service bus 中受支援,但在適用於 windows server的 service bus 1.1 中不可用。

分割槽鍵的使用

當訊息在分割槽佇列或主題中佇列時,service bus 將檢查是否存在分割槽鍵。如果找到分割槽鍵,它將基於該鍵選擇片段。如果未找到分割槽鍵,它將基於內部演算法選擇片段。

使用分割槽鍵

在某些情況下(如會話或事務),需要將訊息儲存在某一片段中。在所有此類情況下,均需使用分割槽鍵。使用相同分割槽鍵的所有訊息會分配給同一片段。

根據具體情況,可以使用不同的訊息屬性作為分割槽鍵:

sessionid。如果某個訊息設定了

sessionid

屬性,service bus 將使用 sessionid 屬性作為分割槽鍵。這樣,屬於同一會話的所有訊息均將分配給同一片段,並且由同乙個訊息**進行處理。這樣,service bus 就可以保障訊息順序以及會話狀態的一致性。

partitionkey。如果某個訊息設定了

partitionkey

屬性但未設定 sessionid 屬性,service bus 將使用 partitionkey 屬性作為分割槽鍵。使用 partitionkey 屬性可以傳送非會話的事務性訊息。該分割槽鍵確保在乙個事務內傳送的所有訊息均由同乙個訊息**進行處理。

messageid。當佇列或主題的

requiresduplicationdetection

屬性設定為true時,如果 sessionid 或 partitionkey 屬性未設定,則使用

messageid

屬性作為分割槽鍵。這可以確保同乙個訊息的所有副本均由同乙個訊息**進行處理,從而使 service bus 可以檢測和消除重複訊息。

不使用分割槽鍵

如果沒有分割槽鍵,service bus 採用輪循方式將訊息分發給分割槽佇列或主題的所有片段。如果所選片段不可用,service bus 會將訊息分配給其他片段。這樣,儘管乙個訊息貯存區暫時不可用,傳送操作仍會成功。

如您所見,分割槽鍵可以將訊息固定到某個特定的片段。如果此片段所在的訊息貯存區不可用,service bus 將返回錯誤。如果沒有分割槽鍵,service bus 則可以挑選不同的片段,操作將成功。因此,除非必要,否則建議您不要提供分割槽鍵。

使用帶有分割槽實體的事務

對於在事務中傳送的訊息,必須指定分割槽鍵。此分割槽鍵可以是 sessionid、partitionkey 或 messageid。對於同一事務中傳送的所有訊息,必須指定相同的分割槽鍵。

可以使用以下**向分割槽佇列傳送事務性訊息:

如果您需要向會話感知佇列或主題傳送事務性訊息,該訊息必須已經設定 sessionid 屬性。如上所述,sessionid 屬性可作為分割槽鍵。如果同時還設定了 partitionkey 屬性,其值必須與 sessionid 屬性相同。

與普通佇列或主題不同的是,不能使用乙個事務將多個訊息傳送到不同會話。

其他資訊

,並查閱

service bus 分割槽佇列示例。

主分割槽和擴充套件分割槽

為什麼裝linux的時候主分割槽 擴充套件分割槽只能有4個?mbr master boot recorder 主要開機扇區,放置硬碟的資訊。mbr 是整個硬碟最重要的地方,因為在 mbr 裡面記錄了兩個非常重要的東西,分別是 開機管理程式,與磁碟分割槽表 partition table 而我們所做的...

oracle 分割槽和分割槽索引

1 分割槽分類 range分割槽,hash分割槽,list分割槽,復合分割槽,間隔分割槽,system分割槽 2 range分割槽 區域分割槽,就是按照定義的區域進行分割槽 語法 create table partition by range field partition p1 values le...

認識主分割槽,活動分割槽,擴充套件分割槽和邏輯分割槽

磁碟分割槽是在硬碟驅動器上定義儲存空間。所有的操作windows作業系統都可以讓使用者為硬劃分多個分割槽,這樣使得乙個物理硬碟分為幾個較小的邏輯分割槽。在windows系統中,安裝在乙個分割槽上的作業系統和其它一些建立的分割槽用來儲存使用者資料,檔案和遊戲。這樣做的好處是,windows系統出現問題...