码迷,mamicode.com
首页 > 编程语言 > 详细

04.ActiveMQ与Spring JMS整合

时间:2015-11-17 18:59:18      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:

1.SpringJMS核心接口介绍

1.JmsTemplate
    JmsTemplate: 是Spring自身提供,只需向Spring容器内注册这个类即可,就可以使用JmsTemplate类对象方便的操作JMS,下面介绍他常用的方法。
    注意:JmsTemplate类是线程安全的,可以在整个应用范围使用。但并不是说整个引用只能使用一个JmsTemplate实例,可以根据需要注入多个JmsTemplate实例。
  1. // send - 发送一个消息,使用消息创建接口MessageCreator
  2. public void send(MessageCreator messageCreator)
  3. public void send(final Destination destination, final MessageCreator messageCreator)
  4. public void send(final String destinationName, final MessageCreator messageCreator)
  5. // sendAndReceive - 发送并接收消息
  6. public Message sendAndReceive(MessageCreator messageCreator)
  7. public Message sendAndReceive(final Destination destination, final MessageCreator messageCreator)
  8. public Message sendAndReceive(final String destinationName, final MessageCreator messageCreator)
  9. // convertAndSend - 使用MessageConverter接口转换消息,先将对象转换成消息再发送消息。与之对应的是receiveAndConvert方法
  10. public void convertAndSend(Object message) throws JmsException
  11. public void convertAndSend(Destination destination, final Object message)
  12. public void convertAndSend(String destinationName, final Object message)
  13. public void convertAndSend(Object message, MessagePostProcessor postProcessor)
  14. public void convertAndSend(Destination destination, final Object message, final MessagePostProcessor postProcessor)
  15. public void convertAndSend(String destinationName, final Object message, final MessagePostProcessor postProcessor)
  16. // receive - 接收消息
  17. public Message receive()
  18. public Message receive(Destination destination)
  19. public Message receive(String destinationName)
  20. // receiveSelected - 接收消息,并过滤消息
  21. public Message receiveSelected(String messageSelector)
  22. public Message receiveSelected(final Destination destination, final String messageSelector)
  23. public Message receiveSelected(final String destinationName, final String messageSelector)
  24. // receiveAndConvert - 接收消息,并使用MessageConverter接口转换消息,把一个消息转换成一个对象
  25. public Object receiveAndConvert()
  26. public Object receiveAndConvert(Destination destination)
  27. public Object receiveAndConvert(String destinationName)
  28. // receiveSelectedAndConvert - 接收消息,并使用消息过滤和消息转换
  29. public Object receiveSelectedAndConvert(String messageSelector)
  30. public Object receiveSelectedAndConvert(Destination destination, String messageSelector)
  31. public Object receiveSelectedAndConvert(String destinationName, String messageSelector)
  32. // browse - 浏览消息
  33. public <T> T browse(BrowserCallback<T> action)
  34. public <T> T browse(Queue queue, BrowserCallback<T> action)
  35. public <T> T browse(String queueName, BrowserCallback<T> action)
  36. // browseSelected - 浏览消息,并使用过滤
  37. public <T> T browseSelected(String messageSelector, BrowserCallback<T> action)
  38. public <T> T browseSelected(final Queue queue, final String messageSelector, final BrowserCallback<T> action)
  39. public <T> T browseSelected(final String queueName, final String messageSelector, final BrowserCallback<T> action)
  40. // execute - 执行SessionCallback、ProducerCallback、BrowserCallback回调接口,并得到回调接口返回值
  41. public <T> T execute(SessionCallback<T> action)
  42. public <T> T execute(SessionCallback<T> action, boolean startConnection)
  43. public <T> T execute(ProducerCallback<T> action)
  44. public <T> T execute(final Destination destination, final ProducerCallback<T> action)
  45. public <T> T execute(final Destination destination, final ProducerCallback<T> action)
2.连接工厂(连接池)
    JmsTemplate需要引用一个ConnectionFactory,JmsTemlate每次发送消息时都会重新创建连接,创建connection,session,创建productor。这是一个非常耗性能的地方,特别是大数据量的情况下。所以出现了PooledConnectionFactory,PooledConnectionFactory是ActiveMQ中的类,它实现了ConnectionFactory。SpringJMS的实现有SingleConnectionFactory、CachingConnectionFactory。
  1. PooledConnectionFactory:会缓存connection,session和productor,不会缓存consumer。因此只适合于生产者发送消息。
  2. SingleConnectionFactory:对于建立JMS服务器链接的请求会一直返回同一个Connection,并且会忽略Connection的close方法调用(包括调用createConnection()得到的Connection)
  3. CachingConnectionFactory:继承了SingleConnectionFactory,所以它拥有SingleConnectionFactory的所有功能,同时它还新增了缓存功能,它可以缓存Session、MessageProducer和MessageConsumer。
    Jmstemplate的问题是在每次调用时都要打开/关闭session和producter,效率很低,所以引申出了PooledConnectionFactory连接池,用于缓存session和producter。然而这还不是最好的。从spring2.5.3版本后,Spring又提供了CachingConnectionFactory,这才是首选的方案。然而CachingConnectionFactory有一个问题必须指出,默认情况下,CachingConnectionFactory只缓存一个session,在它的JavaDoc中,它声明对于低并发情况下这是足够的。与之相反,PooledConnectionFactory的默认值是500。这些设置,在很多情况下,需要亲自去测试并验证。我将其设置为100,对我来说还是很不错。
3.消息接收
(1)同步接收
    同步接收消息使用JmsTemplate的receiveXXX(..)方法,它会导致当前线程一直阻塞直到消息被接收。也可以设置JmsTemplate的属性receiveTimeout,默认是0表示不会接收超时。
(2)异步接收
    异步接收消息使用MessageListener接口(或使用@JmsListener注解),但是实现了MessageListener接口还不够,还需要使用ListenerContainer接口。ListenerContainer接口的实现被称为消息侦听器容器,它的实现有:SimpleMessageListenerContainer、DefaultMessageListenerContainer。使用配置如下:
  • SimpleMessageListenerContainer - 
  • DefaultMessageListenerContainer - 
  1. <!-- 消息侦听器 -->
  2. <bean id="messageListener" class="jmsexample.ExampleListener" />
  3. <!-- 消息侦听器容器 -->
  4. <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  5. <property name="connectionFactory" ref="connectionFactory"/>
  6. <property name="destination" ref="destination"/><!-- 设置监听的队列或主题 -->
  7. <property name="messageListener" ref="messageListener" /><!-- 设置监听器 -->
  8. </bean>
4.MessageConverter


5.JmsTransactionManager



2.ActiveMQ与SpringJMS整合


1.配置

Spring jms 的命名空间
xmlns:jms=" 
xsi:schemaLocation="
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms.xsd"


2.编程使用示例



 













-------------------------------------------------------------------------------------------------------------------------------




04.ActiveMQ与Spring JMS整合

标签:

原文地址:http://www.cnblogs.com/LiZhiW/p/4972309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!