總排序
有時,確保每個主題消費者看到主題上的訊息以完全相同的順序到達可能很有用。通常,代理程式會保證同一個生產者傳送的所有訊息的順序。然而,由於代理程式使用多個執行緒和非同步處理,來自不同生產者的訊息可能會以不同的順序到達不同的消費者。
例如,如果我們有生產者 P
和 Q
發送訊息,大約在同一時間 P
發送 P1
、P2
、 P3
,而 Q
發送 Q1
、Q2
。因此,兩個不同的消費者可能會看到訊息以下列順序到達
消費者 1:P1 P2 Q1 P3 Q2 消費者 2:P1 Q1 Q2 P2 P3
在這個範例中,每個生產者的訊息都保持自身相對順序。然而,跨生產者的訊息流可能會混合在一起。
ActiveMQ Classic 中目的地的總排序確保每個消費者都會看到該主題上的相同總排序。這會產生效能成本,因為需要更大的同步。這可能很有用,特別是當需要非常快速的樂觀交易時。透過總排序,訊息將會像這樣到達
消費者 1:P1 P2 Q1 P3 Q2 消費者 2:P1 P2 Q1 P3 Q2
設定總排序
在每個目的地原則上啟用 <strictOrderDispatchPolicy/>
。以下是一個範例