2013-07-11 29 views

回答

1

你可以写你自己的“聚合器”作为一个独立的Java应用程序:

  • 对于每个队列/主题都在自己的线程读者。
  • 每个阅读器再次在“聚合队列”上发送其收到的消息。

  • 有另一个线程来监听“聚合队列”。

作为一种变体,您可以使用JVM队列(如java.util.concurrent.ArrayBlockingQueue)作为“聚合队列”。这是更快的,不需要另一个MQ队列,不需要网络带宽,但它不是持久的。


另一个想法是使用“消息驱动bean(MDB)”为每个传入队列/主题:

  • 同样,每个这些的MDB的刚读取消息,并将其重新发送到“聚合队列“。
  • 让另一个MDB在“聚合队列”上侦听。
0

关于质量要求的一些建议。我相信你必须考虑他们。 他们将高度关注您的技术解决方案。

  1. 是指消息丢失是否可以接受? 客户端可以考虑。 例如内存队列坐在中间,例如传入队列1 ... n - >内存中的ArrayBlockingQueue - >传出队列。 ArrayBlockingQueue中的数据将在应用崩溃时丢失。

  2. 是单个传出队列可接受的消息副本吗? 我会建议是的。 设置适用级别PossibleDuplicateFlag使客户端意识到这一点。

  3. 差异传入队列每秒传入消息的速度有多快? 一个队列会话只有一个uniqe线程。性能必须提前考虑。