2013-07-11 53 views

回答

1

你可以寫你自己的「聚合器」作爲一個獨立的Java應用程序:

  • 對於每個隊列/主題都在自己的線程讀者。
  • 每個閱讀器再次在「聚合隊列」上發送其收到的消息。

  • 有另一個線程來監聽「聚合隊列」。

作爲一種變體,您可以使用JVM隊列(如java.util.concurrent.ArrayBlockingQueue)作爲「聚合隊列」。這是更快的,不需要另一個MQ隊列,不需要網絡帶寬,但它不是持久的。


另一個想法是使用「消息驅動bean(MDB)」爲每個傳入隊列/主題:

  • 同樣,每個這些的MDB的剛讀取消息,並將其重新發送到「聚合隊列「。
  • 讓另一個MDB在「聚合隊列」上偵聽。
0

關於質量要求的一些建議。我相信你必須考慮他們。 他們將高度關注您的技術解決方案。

  1. 是指消息丟失是否可以接受? 客戶端可以考慮。 例如內存隊列坐在中間,例如傳入隊列1 ... n - >內存中的ArrayBlockingQueue - >傳出隊列。 ArrayBlockingQueue中的數據將在應用崩潰時丟失。

  2. 是單個傳出隊列可接受的消息副本嗎? 我會建議是的。 設置適用級別PossibleDuplicateFlag使客戶端意識到這一點。

  3. 差異傳入隊列每秒傳入消息的速度有多快? 一個隊列會話只有一個uniqe線程。性能必須提前考慮。