【问题标题】:load distributon between various jms provider instances各种 jms 提供程序实例之间的负载分布
【发布时间】:2011-08-04 16:11:22
【问题描述】:

生产者 消费者

在上述场景中,假设有“N”个生产者试图将大量消息放入我们(消费者的)JMS 队列中。

我的问题是负载分配在 JMS 环境中如何工作,特别是队列。

我认为 JNDI 在这种情况下提供了足够的间接性,因此所有客户端都只是查找一些基于 JNDI 的队列和连接工厂。并且任何类型的 loadDistributor 都可以位于消费者和生产者之间以获取传入的消息。

它如何将这些传入的消息分发给一个 JMS 提供者群(我认为我们需要一个群来处理传入的流量)但是你如何维护多个队列的同步副本......或者你让任何消息进入任何队列并使用 MDB 对其进行处理。但是您如何保证“消息将按照收到的顺序进行处理”,因为它们都分布在一堆队列中...

对于这种“高负载”环境,推荐的方法是什么?

【问题讨论】:

    标签: jakarta-ee jms ejb java-ee-5


    【解决方案1】:

    队列本质上是“串行”的,其中的消息将分别传递给一个接收者。因此,例如,如果您有 2 个 MBD 在队列上监听,它们将依次接收一条消息,然后获取下一条。

    对于传入的消息,您只需将它们一个接一个地放入队列中。

    我可能不完全理解您在研究什么,但它亲眼看到, 您需要一个 JMS 提供程序(“消息传递中心”),它公开一个队列,多个 MDB(可以存在于不同主机上)将从该队列中挑选消息。

    【讨论】:

    • 感谢您的回复 Heiko.. 在正常情况下,拥有一个公开一个队列和多个 MDB 作为消息侦听器的消息传递中心应该可以正常工作。当每天有数百万条消息进入队列时,情况如何?符合 JEE5 的服务器(如 weblogic 11g 或 Glassfish v3)是否能够每天处理大约 300 万条进入队列的消息。我在想我们是否可以有多个队列(每个队列都托管在运行 JMS 提供程序的单独主机上)处理如此高的流量,但在这种情况下,队列将不同步,因此消息排序会变得混乱。
    • 基本上我正在寻找行业最佳实践来处理排队环境中如此高的消息量......这可以通过 JEE5 服务器处理吗?
    • 不知道 WL 或 GF。 HornetQ 可以(取决于消息大小和持久性选项)每秒执行 >> 10k 条消息 - 请参阅 community.jboss.org/wiki/…
    • 非常好.. 非常感谢基于这些性能指标的链接、负责处理队列的消息传递集线器和处理这些消息的不同主机上的多个 MDB .. 这种架构应该可以很好地工作。 .
    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2010-12-24
    • 2018-09-05
    • 1970-01-01
    • 2011-03-27
    • 2017-11-24
    • 2015-01-25
    相关资源
    最近更新 更多