spring的批处理消息监听器(从DefaultMessageListenerContainer扩展)

时间:2016-05-09 18:15:28

标签: jms activemq spring-batch spring-jms

我在春天有一个基本的JMS相关问题。 不必一次消费一条消息,而是将消息批量持续一段时间(比如几秒钟)并批量处理它们(从而批量处理)会很方便。我看到java只提供onMessage调用,一次只发出一条消息。我遇到了BatchMessageListenerContainer,这似乎完全是这样做的。配方被移植到正在使用它的弹簧批次。

我想知道方法本身是否存在任何根本问题?如果没有问题,我们可以建议春天的人在spring-jms工件本身中添加它(无需使用spring-batch)。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您需要并行处理消息,则可以在Spring项目中使用 DefaultMessageListenerContainer ,而无需进行弹簧批处理。您可以将属性并发使用者设置为所需的分区数。

 @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;
    }

否则,如果您使用的是春季批处理,则可以使用远程分块和BatchMessageListenerContainer,您可以在https://github.com/spring-projects/spring-batch/tree/master/spring-batch-samples/src/main/java/org/springframework/batch/sample/remotechunking

中找到示例。