我在spring.I有一个基本的JMS相关问题,与其一次只消耗一个消息,不如在短时间内(比如说几秒钟)批量处理消息(从而进行批量处理),这样更方便。我看到java只提供了一个 onMessage
呼叫,每次只给一个消息。我遇到了 BatchMessageListenerContainer 似乎正是这样做的。这个配方被移植到了spring-batch中使用。
我想知道这个方法本身是否有什么根本性的问题?如果没有问题,我们可以向spring的人建议,把这个添加到 spring-jms
物品本身(而不需要使用 spring-batch
什么的)。)
谢谢!我有一个基本的JMS相关的问题,在春季。
如果你的需求是并行处理消息,你可以使用 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。