JMS Apache ActiveMQ使用(3)

還有工作就是如何接受JMS Message並進行處理了,spring中也有現成的框架進行處理MessageListenerAdapter和DefaultMessageListenerContainer,我們只要寫一個普通類編寫處理消息的邏輯,具體如何接收消息都由Spring完成。 
spring-listener-jms.xml 
Xml代碼
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"   
  3.         "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  4. <beans>  
  5.     <import resource="spring-jms.xml"/>  
  6.   
  7.     <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
  8.         <constructor-arg>  
  9.             <bean class="com.viva.server.message.jms.UserRegisterListener"/>  
  10.         </constructor-arg>  
  11.         <property name="defaultListenerMethod" value="onRegister"/>  
  12.         <property name="messageConverter" ref="messageConvert"/>  
  13.     </bean>  
  14.   
  15.     <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  16.         <property name="connectionFactory" ref="jmsFactory"/>  
  17.         <property name="destination" ref="queueDestination"/>  
  18.         <property name="messageListener" ref="messageListener"/>  
  19.     </bean>  
  20.   
  21.     <bean id="topicListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  22.         <property name="connectionFactory" ref="jmsFactory"/>  
  23.         <property name="destination" ref="topicDestination"/>  
  24.         <property name="messageListener" ref="messageListener"/>  
  25.     </bean>  
  26.   
  27. </beans>  
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  
  3.         "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  4. <beans>  
  5.     <import resource="spring-jms.xml"/>  
  6.   
  7.     <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
  8.         <constructor-arg>  
  9.             <bean class="com.viva.server.message.jms.UserRegisterListener"/>  
  10.         </constructor-arg>  
  11.         <property name="defaultListenerMethod" value="onRegister"/>  
  12.         <property name="messageConverter" ref="messageConvert"/>  
  13.     </bean>  
  14.   
  15.     <bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  16.         <property name="connectionFactory" ref="jmsFactory"/>  
  17.         <property name="destination" ref="queueDestination"/>  
  18.         <property name="messageListener" ref="messageListener"/>  
  19.     </bean>  
  20.   
  21.     <bean id="topicListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  22.         <property name="connectionFactory" ref="jmsFactory"/>  
  23.         <property name="destination" ref="topicDestination"/>  
  24.         <property name="messageListener" ref="messageListener"/>  
  25.     </bean>  
  26.   
  27. </beans>  

 從配置文件可以看出配置了一個Topic監聽器和Queue監聽器,實際的監聽類就是一個UserRegisterListener,由它處理用戶註冊事件。 
UserRegisterListener.java代碼 
Java代碼 複製代碼 收藏代碼
  1. public class UserRegisterListener {   
  2.     public void onRegister(VivaUserRegisterMessage registerMessage){   
  3.         System.out.println("User Register,tel="+ registerMessage.getTel()+ ",time="+registerMessage.getRegisterTime());    
  4.     }   
  5. }  
  1. public class UserRegisterListener {  
  2.     public void onRegister(VivaUserRegisterMessage registerMessage){  
  3.         System.out.println("User Register,tel="+ registerMessage.getTel()+ ",time="+registerMessage.getRegisterTime());   
  4.     }  
  5. }  

 最後寫一個JUnit測試用戶來測試一下代碼 
JMSTestor.java 
Java代碼 複製代碼 收藏代碼
  1. public class JMSTestor extends TestCase {   
  2.     private ApplicationContext context;   
  3.   
  4.     public void testQueueSend(){   
  5.         context = new ClassPathXmlApplicationContext("spring-jms.xml");   
  6.         JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("queueTemplate");   
  7.         VivaUserRegisterMessage msg = new VivaUserRegisterMessage();   
  8.         msg.setRegisterTime(new Date());   
  9.         msg.setTel("1385199XXXX");   
  10.         msg.setUserId(1);   
  11.         jmsTemplate.convertAndSend(msg);   
  12.     }   
  13.   
  14.     public void testTopicSend(){   
  15.         context = new ClassPathXmlApplicationContext("spring-jms.xml");   
  16.         JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("topicTemplate");   
  17.         VivaUserRegisterMessage msg = new VivaUserRegisterMessage();   
  18.         msg.setRegisterTime(new Date());   
  19.         msg.setTel("1385199XXXX");   
  20.         msg.setUserId(1);   
  21.         jmsTemplate.convertAndSend(msg);   
  22.     }   
  23.   
  24.     public void testListener()throws Exception{   
  25.         context = new ClassPathXmlApplicationContext("spring-listener-jms.xml");   
  26.         Thread.sleep(1000*60*30);   
  27.     }   
  28.   
  29.        
  30. }  
  1. public class JMSTestor extends TestCase {  
  2.     private ApplicationContext context;  
  3.   
  4.     public void testQueueSend(){  
  5.         context = new ClassPathXmlApplicationContext("spring-jms.xml");  
  6.         JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("queueTemplate");  
  7.         VivaUserRegisterMessage msg = new VivaUserRegisterMessage();  
  8.         msg.setRegisterTime(new Date());  
  9.         msg.setTel("1385199XXXX");  
  10.         msg.setUserId(1);  
  11.         jmsTemplate.convertAndSend(msg);  
  12.     }  
  13.   
  14.     public void testTopicSend(){  
  15.         context = new ClassPathXmlApplicationContext("spring-jms.xml");  
  16.         JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("topicTemplate");  
  17.         VivaUserRegisterMessage msg = new VivaUserRegisterMessage();  
  18.         msg.setRegisterTime(new Date());  
  19.         msg.setTel("1385199XXXX");  
  20.         msg.setUserId(1);  
  21.         jmsTemplate.convertAndSend(msg);  
  22.     }  
  23.   
  24.     public void testListener()throws Exception{  
  25.         context = new ClassPathXmlApplicationContext("spring-listener-jms.xml");  
  26.         Thread.sleep(1000*60*30);  
  27.     }  
  28.   
  29.       
  30. }  

執行testTopicSend發送JMS Message到Topic 
執行testQueueSend發送JMS Message到Queue 
執行testListener啓動Topic和Queue監聽器處理JMS Message 
 完成!另外ActiveMQ集成了Jetty服務,可以訪問地址http://localhost:8161/admin/查看具體信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章