【问题标题】:Single point to point queue and multiple listeners单点对点队列和多个监听器
【发布时间】:2012-10-28 00:59:27
【问题描述】:

我有一个“点对点”IBM MQ 队列接收来自多个生产者的消息。我的应用程序使用队列中的消息。我正在使用 spring 'jmstemplate" 和 "DefaultMessageListenerContainer" 来异步使用消息。

我的应用程序在 2 个 jvm 上运行,这意味着每个 jvm 上有 2 个活动的侦听器正在侦听同一个队列。

来回答我的问题,如果有消息...

1) 监听器如何知道消息到达队列?

2) 在两个侦听器中,哪一个会收到消息?将消息分发给听众的方法是什么?

3) 我可以将单个队列的听众数量扩展到“N”个吗?如果我增长到 10 个听众,缩放是如何工作的?消息是如何分发给听众的?

4) MQ 服务器如何确保同一条消息不会发送到多个监听器?

这些问题可能很简单,但无法深入了解上述场景的工作原理。请分享您的想法...

【问题讨论】:

    标签: spring jms ibm-mq message-queue spring-jms


    【解决方案1】:
    1. 这是 IBM 客户端库的一个功能;侦听器容器只是轮询 JMS API 以等待消息;默认情况下,它使用 1 秒的接收超时;使用 TRACE 级别的日志记录,您将看到显示此活动的日志消息。可以通过在容器上设置 receiveTimeout 来修改超时时间。
    2. 从客户的角度来看是不确定的; IBM 经纪人知道有多少消费者注册并选择了一个。一些代理允许配置预取;这有助于提高音量下的性能,但会降低音量下的性能。
    3. 是的; Spring Listener Container 可以根据负载动态扩展监听器;您可以配置最小/最大消费者,Spring 将根据需要在这些范围内进行调整。就代理而言,每个侦听器都是一个单独的消费者,因此工作是根据代理的算法分配的。
    4. 这是 IBM 代理的功能(也是 JMS 合同的一部分)。

    如果使用事务并且消息被回滚到队列中;无法保证同一个侦听器会收到重新传递的消息。

    【讨论】:

    • 感谢您的回答因此,将消息分发给侦听器的智能取决于代理而不是侦听器。
    • 问题 2) 的详细信息:IBM MQ 使用 Hot Consumers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多