Spring JMS 消息处理知识点

        JmsTemlate每次发送消息时都会重新创建连接,创建connection,session,创建productor。这是一个非常耗性能的地方,特别是大数据量的情况下。因此后来发送时采用mq的pooledConnectionFactory。这个类只会缓存connection,session和productor,不会缓存consumer。因此只适合于生产者发送消息。那为什么不缓存consumer呢? 官方解释是由于消费者一般是异步的,也就是说,broker代理会把生产者发送的消息放在一个消息者的预取缓存中。当消息者准备好的时候就会从这个预取缓存中取出来进行处理。我想,这个只是在要求消息处理的及时性不是特别高的情况下。如果希望处理能够提高速度,自然也可以从这部分提高效率,减小不断创建consumer的时间(大数据量的情况下)。

        客户端消费者也可以用DefaultMessageListenerContainer来实现,这个类实现监听消息的原理是,对于n个消费者(通过concurrentConsumers),会有n个AsyncMessageListenerInvoker实例进行处理,AsyncMessageListenerInvoker事实上继承了SchedulingAwareRunnable,是一个runnable任务,run方法中就是通过while循环来调用consumer的recieve方法来接收消息的。

参考文章:http://blog.csdn.net/zhaozhenzuo/article/details/7933445

猜你喜欢

转载自bijian1013.iteye.com/blog/2309210