2010-05-18 79 views
2

劃分消息隊列的標準智慧和注意事項是什麼?消息代理隊列和消息類型

假設消息數量相對較少(< 1000/day),將多個消息類型合併爲一個隊列並讓消費者使用選擇器來過濾它們是否合理?或者,單個隊列是否只處理單個消息類型?

一對夫婦可能考慮我能想到的:至少在我有限的ActiveMQ知識

  • ,它看起來像讀/寫安全是每個隊列。因此需要不同讀/寫權限的消息類型需要不同的隊列。
  • 消息選擇似乎需要一個標準的頭部值(消息類型:AbcMessage)(?> 10,> 100,> 1000)對
  • 隊列的爆炸過濾似乎影響比消息
  • 的爆炸性能更
  • 每個隊列的單個消息類型似乎更容易編寫客戶端代碼。只需處理隊列中的每條消息。如果您需要不同的消息類型,請訂閱不同的隊列。
  • ???

回答

1

任何給定的MQ系統都應該能夠處理任何給定隊列中的數百萬條消息,我根本不關心這個問題。

我更喜歡具有不同現實世界意義的隊列,而不是擔心選擇器。我知道有真正的理由使用選擇器或消耗和重新排隊,但我更喜歡使隊列明顯而不用擔心選擇。

1

由於這個問題沒有得到真正解決,而且您在問題中詢問了這個問題(當我發現這個問題時,這是我正在尋找的東西),所以我想我可以在我如何能夠過濾單一的異構類型隊列。

如果你看here,你會發現一個用戶定義的屬性可用於所有的消息,稱爲JMSType。這是一個String,默認爲空。發送消息時,讓生產者將其設置爲商定的值,例如maptext,然後在消費者中根據您希望接收的消息類型使用特定的消息選擇器。使用相同的例子,它將是JMSType = 'map'JMSType = 'text'

我能夠成功地使用該技術與Java生產者和使用ActiveMQ-CPP庫的C++消費者。