2016-06-23 67 views
2

我有一個生產者發送有關購買/取消隊列產品的消息,並基於該數據計算產品的可用性。如何實施EMS競爭消費者和分銷商

如果它被錯誤的序列處理了多個消費者,我的可用性計算將是錯誤的。

現在的問題是我想獲得所有消息相關的一個產品正在處理有爭議處理在哪個消費者。

有人可以建議我該怎麼做。

目前我正在使用的工具是TIBCO EMS,C#windows服務。

回答

1

我不知道它是混合競爭消費者和序列可行的在所有...但這裏有兩個選擇,可能激發你:

選項A

OK ......我在這裏猜測很多東西。

假設:

  • 您需要的競爭對消費者安全(例如:第一個故障),不負載分擔。
  • 你需要依次

處理所有的消息,我必須讓這些hypothesizes,因爲過程的順序和相互競爭的負荷分擔通常不兼容,除非您介紹另一種機制(例如:消息選擇,主題等)

所有這一切,你然後設置隊列爲「獨家」。並有多個客戶端連接...只有一個會真正收到消息...因此處理順序永遠不會錯。只有第一個失敗時,纔會使用「競爭」(等待)客戶端。

選項B

OK ...如果我錯了上面,你真的需要多個客戶端同時進行處理,並仍然堅持對與特定的產品消息的順序...試試這個:

讓發送應用程序在每個消息中設置一個帶有產品編號的JMS頭。然後,您可以在非排他性隊列(默認)中設置多個客戶端,並在消息選擇器上綁定新標題(例如:productID = 1234)。在這種情況下,客戶端並不真正競爭,但他們至少分擔負載,並按順序處理有關產品ID的所有消息。缺點?您的郵件選擇器必須涵蓋所有產品ID ...如果您有成千上萬的產品,則不是真的可行。

選項C

方案C相似,你可以分離產品進入多個隊列(例如:產品類別),並有一個客戶端爲每個類別,爲了處理所有消息。在這種情況下,客戶端上不需要消息選擇器。但是,您需要引入排序機制(主題+消息選擇器和ESB或發件人自己排序)

0

您的問題的另一種解決方案可能是使用排序鍵。您可以通過在JMS隊列接收

Sequencing Key

的其他選項卡指定鍵值使用序列