java多线程监听JMS、MQ队列

本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

转载请注明出处和作者.http://blog.csdn.net/xtj332

背景:消息队列中有非常多的消息需要处理,并且监听器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());

输出结果:
    在onMessage中线程ID是Thread[testListenerContainer1-3,5,main]  
    在onMessage中线程ID是Thread[testListenerContainer1-4,5,main]  
    在onMessage中线程ID是Thread[testListenerContainer1-6,5,main]  



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值