Spring JMS:自定义DefaultMessageListenerContainer的行为以提高性能

时间:2018-10-09 09:36:47

标签: spring performance jms spring-jms

我们在味精处理中面临一些性能故障。请在下面找到我们正在寻找的当前行为和预期行为,如果您有建议,它将非常有帮助。

Jms配置

<!-- JMS container for report generator -->
    <bean id="jmsContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="queueConnectionFactory" />

        <!-- XML report generator -->
        <property name="destinationName" value="queue" />       
        <property name="messageListener" ref="ourAppListener" />
        <property name="destinationResolver" ref="jmsDestinationResolver"/>
        <!-- Number of threads on these queues -->
        <property name="concurrentConsumers" value="6"></property>
    </bean>

    <bean id="jmsDestinationResolver"        class="org.springframework.jms.support.destination.JndiDestinationResolver"/>

Java Class= OurAppListener  implements javax.jms.MessageListener(from webmethods jms jar) 

行为=当我们向队列发送8个消息时,尽管创建了6个使用者,但只有3个线程并行运行。 Thread run timing and order

从图像中我们假设以下几点。 T1,T2,T6开始并行运行。 T4在T1之后立即开始,因此T4正在等待T1。 T8在T4之后立即开始,因此T8正在等待T4。 T8总等待时间(T1 + T4)。

所以我们的批处理总共需要T1 + T4 + T8时间才能完成。

有没有一种方法可以更改此行为(到第27分钟,所有其他线程都处于空闲状态,但T4 / T8仍未使用它们),以便可以有效地使用空闲线程?

0 个答案:

没有答案