我用Spring + Hibernate的JPA +在我的应用程序。
我需要阅读从消息Websphere MQ
和插入消息为DB。 有时可连续提供信息和邮件的数量有时非常少的,有时我们不能期望从消息Queue
。
目前,我被一个读消息之一,将它们插入到数据库。 但它没有太大的帮助在性能方面。
我的意思是当我有(在队列实施例300K消息)的消息的块我无法插入他们更快。 插入每秒DB实体的数量没有那么高。 因为我做的承诺为每一个实体。
我想使用Hibernate批量处理,这样我就可以在一个单一提交插入实体的名单。 (实施例:每承诺30至40的消息)
问题:
如何从队列中接收多条消息? (我已经检查了BatchMessageListenerContainer可能会有帮助。但我不能得到一些参考)
我应该分贝插入过程中分离出侧onMessage方法? 因此,该线程将被释放到集中并从队列中选择下一个消息可用?
并行线程使用情况如何?
当前实现:
消息监听器:
<bean id="myMessageListener" class="org.mypackage.MyMessageListener">
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destinationName" ref="queue"/>
<property name="messageListener" ref="myMessageListener"/>
<property name ="concurrentConsumers" value ="10"/>
<property name ="maxConcurrentConsumers" value ="50"/>
</bean>
监听器类:
package org.mypackage.MyMessageListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.mypackage.service.MyService;
public class MyMessageListener implements MessageListener {
@Autowired
private MyService myService;
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
// parse the message
// Process the message to DB
} catch (JMSException e1) {
e1.printStackTrace();
}
}
}