春天的批量消息监听器(从DefaultMessageListenerContainer扩展而来)。

问题描述 投票:3回答:1

我在spring.I有一个基本的JMS相关问题,与其一次只消耗一个消息,不如在短时间内(比如说几秒钟)批量处理消息(从而进行批量处理),这样更方便。我看到java只提供了一个 onMessage 呼叫,每次只给一个消息。我遇到了 BatchMessageListenerContainer 似乎正是这样做的。这个配方被移植到了spring-batch中使用。

我想知道这个方法本身是否有什么根本性的问题?如果没有问题,我们可以向spring的人建议,把这个添加到 spring-jms 物品本身(而不需要使用 spring-batch 什么的)。)

谢谢!我有一个基本的JMS相关的问题,在春季。

jms activemq spring-batch spring-jms
1个回答
0
投票

如果你的需求是并行处理消息,你可以使用 DefaultMessageListenerContainer 中,而无需使用spring batch。你将属性concurrent consumers设置为你想要的分区数量。

 @Bean
    public DefaultMessageListenerContainer messageListener() {
        DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer();
        **listener.setConcurrentConsumers(Integer.valueOf(env.getProperty(JmsConstant.CONCURRENT_CONSUMERS_SIZE)));**
        // listener.setMaxConcurrentConsumers(maxConcurrentConsumers);
        listener.setConnectionFactory((ConnectionFactory) queueConnectionFactory().getObject());
        listener.setDestination((Destination) jmsQueue().getObject());
        listener.setMessageListener(this);
        listener.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
        listener.setSessionTransacted(true);

        return listener;
    }

否则,如果你使用spring batch,你可以使用远程分块和BatchMessageListenerContainer,你可以在这里找到一个例子。https:/github.comspring-projectsspring-batchtreemasterspring-batch-samplessrcmainjavaorgspringframeworkbatchsampleremotechunking。

© www.soinside.com 2019 - 2024. All rights reserved.