我在春天有一个基本的JMS相关问题。
不必一次消费一条消息,而是将消息批量持续一段时间(比如几秒钟)并批量处理它们(从而批量处理)会很方便。我看到java只提供onMessage
调用,一次只发出一条消息。我遇到了BatchMessageListenerContainer,这似乎完全是这样做的。配方被移植到正在使用它的弹簧批次。
我想知道方法本身是否存在任何根本问题?如果没有问题,我们可以建议春天的人在spring-jms
工件本身中添加它(无需使用spring-batch
)。
谢谢!
答案 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
中找到示例。