JAVA多线程监听JMS、MQ行列
JAVA多线程监听JMS、MQ队列
背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。
对于上面提到的方法2使用一个监听器开启多线程监听,借助spring自带的DefaultMessageListenerContainer可以很方便实现这一功能。
监听器打印输出当前线程:
背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。
对于上面提到的方法2使用一个监听器开启多线程监听,借助spring自带的DefaultMessageListenerContainer可以很方便实现这一功能。
<!-- 使用spring进行配置 监听--> <bean id="testListenerContainer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"></property> <property name="destination" ref="queue2"></property> <property name="messageListener" ref="messageReceiver"></property> <property name="sessionTransacted" value="false"></property> <!-- 设置固定的线程数 --> <property name="concurrentConsumers" value="6"></property> <!-- 设置动态的线程数 --> <property name="concurrency" value="2-9"></property> <!-- 设置最大的线程数 --> <property name="maxConcurrentConsumers" value="15"></property> </bean>
监听器打印输出当前线程:
public void onMessage(Message message) { System.out.println("在onMessage中线程ID是"+Thread.currentThread());