Spring2.5 JMS整和ActiveMQ 5.5 http://blog.csdn.net/shimiso/article/details/6712034

   异步进程通信是面向服务架构(SOA)一个重要的组成部分,因为企业里很多系统通信,特别是与外部组织间的通信,实质上都是异步的。Java消息服务(JMS)是用于编写使用异步消息传递的JEE应用程序的API。传统的使用JMS API进行消息传递的实现包括多个步骤,例如JNDI查询队列连接工厂和Queue资源,在实际发送和接收消息前创建一个JMS会话。

        Spring框架则简化了使用JEE组件(包括JMS)的任务。它提供的模板机制隐藏了典型的JMS实现的细节,这样开发人员可以集中精力放在处理消息的实际工作中,而不用担心如何去创建,访问或清除JMS资源。


集成环境

       Spring采用2.5.6版本,ActiveMQ使用的是5.5.0,从apache站点可以下载。本文是将Spring集成ActiveMQ来发送和接收JMS消息。

环境所需JAR包

Spring2.5 JMS整和ActiveMQ 5.5 http://blog.csdn.net/shimiso/article/details/6712034_第1张图片

applicationContext-service.xml :

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xmlns:aop="http://www.springframework.org/schema/aop"  
  6.        xmlns:tx="http://www.springframework.org/schema/tx"  
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  9.            http://www.springframework.org/schema/context  
  10.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  11.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
  12.            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  13.   
  14.     <bean id="producerService" class="test.ProducerServiceImpl">  
  15.        <property name="jmsTemplate" ref="jmsTemplate"/>  
  16.        <property name="destination" ref="destination"/>  
  17.     </bean>         
  18.    
  19.     <bean id="consumerService" class="test.ConsumerServiceImpl">  
  20.        <property name="jmsTemplate" ref="jmsTemplate"/>  
  21.        <property name="destination" ref="destination"/>  
  22.     </bean>         
  23.    
  24.     <!-- 配置Jms模板  -->  
  25.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  26.        <property name="connectionFactory" ref="connectionFactory"/>  
  27.        <property name="defaultDestination" ref="destination"/>  
  28.        <property name="receiveTimeout" value="10000"/>  
  29.     </bean>  
  30.    
  31.     <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
  32.         <property name="brokerURL" value="tcp://localhost:61616" />  
  33.     </bean>  
  34.    
  35.     <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">  
  36.         <constructor-arg index="0" value="test" />  
  37.     </bean>  
  38. </beans>  


接收消息:
[java] view plain copy print ?
  1. package test;  
  2.   
  3. public interface ConsumerService {  
  4.     public void receive();  
  5. }  
  6.   
  7.   
  8.   
  9. package test;  
  10. import javax.jms.Destination;  
  11. import javax.jms.JMSException;  
  12. import javax.jms.TextMessage;  
  13.    
  14. import org.springframework.jms.core.JmsTemplate;  
  15.   
  16. public class ConsumerServiceImpl implements ConsumerService {  
  17.     JmsTemplate jmsTemplate;  
  18.        
  19.     Destination destination;  
  20.    
  21.     public void receive() {  
  22.         TextMessage message = (TextMessage)jmsTemplate.receive();  
  23.         try {  
  24.             System.out.println(">>接收到的消息>>"+message.getText());  
  25.         } catch (JMSException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.    
  30.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  31.         this.jmsTemplate = jmsTemplate;  
  32.     }  
  33.    
  34.     public void setDestination(Destination destination) {  
  35.         this.destination = destination;  
  36.     }  
  37. }  

发送消息:

[java] view plain copy print ?
  1. package test;  
  2.   
  3. public interface ProducerService {  
  4.     public void send();  
  5. }  
  6.   
  7.   
  8. package test;  
  9.   
  10. import javax.jms.Destination;  
  11. import javax.jms.JMSException;  
  12. import javax.jms.Message;  
  13. import javax.jms.Session;  
  14. import javax.jms.TextMessage;  
  15.   
  16. import org.springframework.jms.core.JmsTemplate;  
  17. import org.springframework.jms.core.MessageCreator;  
  18.   
  19. public class ProducerServiceImpl implements ProducerService {  
  20.     JmsTemplate jmsTemplate;  
  21.        
  22.     Destination destination;  
  23.    
  24.     public void send() {  
  25.         MessageCreator messageCreator = new MessageCreator(){  
  26.                 public Message createMessage(Session session){  
  27.                     TextMessage message = null;  
  28.                     try {  
  29.                         message = session.createTextMessage("你好 Hello");  
  30.                     } catch (JMSException e) {  
  31.                         e.printStackTrace();  
  32.                     }  
  33.                     return message;  
  34.                 }};  
  35.    
  36.         jmsTemplate.send(this.destination, messageCreator);  
  37.     }  
  38.    
  39.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  40.         this.jmsTemplate = jmsTemplate;  
  41.     }  
  42.    
  43.     public void setDestination(Destination destination) {  
  44.         this.destination = destination;  
  45.     }  
  46.   
  47. }  

测试:

[java] view plain copy print ?
  1. package test;  
  2.    
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.    
  6. public class Test {  
  7.    
  8.     private static ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext-service.xml");  
  9.    
  10.     private static void send(){  
  11.         ProducerService producerService = (ProducerService)appContext.getBean("producerService");  
  12.         producerService.send();       
  13.     }  
  14.    
  15.     private static void receive(){  
  16.         ConsumerService consumerService = (ConsumerService)appContext.getBean("consumerService");  
  17.         consumerService.receive();        
  18.     }  
  19.    
  20.     /** 
  21.      * @param args 
  22.      */  
  23.     public static void main(String[] args) {  
  24.         send();  
  25.         receive();  
  26.     }  
  27.    
  28. }  


点击apache-activemq-5.5.0\bin下activemq.bat启动服务

Spring2.5 JMS整和ActiveMQ 5.5 http://blog.csdn.net/shimiso/article/details/6712034_第2张图片

执行Test类的main方法打印信息如下:

>>接收到的消息>>你好 Hello


你可能感兴趣的:(Spring2.5 JMS整和ActiveMQ 5.5 http://blog.csdn.net/shimiso/article/details/6712034)