【问题标题】:How to configure concurrency to a single queue如何将并发配置到单个队列
【发布时间】:2014-03-06 12:01:52
【问题描述】:

我想在 jms 模板中为单个队列配置消费者数量。我试图实现这一点:JmsTemplate - define concurrency per queue? 但在 ActiveMQQueue 中仍然显示 1。 我的消息传递上下文:

<bean id="parentContainer" abstract="true"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

    <bean id="parentContainer" abstract="true"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
    </bean>

    <bean id="playerStatsListener" parent="parentContainer">
        <property name="destination" ref="playerStatsQueue" />
        <property name="messageListener" ref="playerStatsService" />
        <property name="concurrency" value="100" />
    </bean>

    <!-- Listeners -->
    <bean id="playerStatsService" class="com.XXX.service.PlayerStatsService" />
    <!-- Destinations -->
        <bean id="playerStatsQueue" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg value="playerStatsQueue" />

另一个相关问题:“listener”和“messageListener”属性有区别吗?

【问题讨论】:

    标签: java spring spring-jms jmstemplate


    【解决方案1】:

    一般情况下,您可以在DefaultMessageListenerContainer 上设置concurrentConsumersmaxConcurrentConsumersconcurrency 设置提供了一个方便的范围。

    但是根据文档

    通过“lower-upper”字符串指定并发限制,例如“5-10”,或 一个简单的上限字符串,例如“10”(下限为 1 in 本例)。

    因此,如果您只说 concurrency=100,它仍然等同于 1-100,这可以解释为什么您看到 1 个消费者。

    【讨论】:

    • 谢谢我自己弄清楚了:)。所以我的解决方案是有几个 jms:listener-container 具有不同的并发性。这看起来可以吗?
    • 我从未有过那个用例,但从您发布的其他答案来看,这似乎是这样做的方法。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2018-10-25
    • 2022-06-18
    • 2019-12-05
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多