ActiveMQ5.0.1+Spring实现JMS异步消息发送

来源:互联网 发布:c语言面向对象编程 编辑:程序博客网 时间:2024/06/16 13:42

先到[url=http://www.activemq.org]http://www.activemq.org[/url](官网)上面去下载ActiveMQ5.0.1. 把一些毕要的jar包加入到项目的lib目录下面.

至于jar包的添加在官方网上都有介绍.

官方网上的资料信息会给你的开发带来很大的帮助.这是个人的感触虽然是全英文的.但哪些英语并不难.

下面是Spring的配置文件.

Xml代码 复制代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:amq="http://activemq.apache.org/schema/core"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schem   
  5.     /beans/spring-beans-2.0.xsd   
  6.   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd      
  7.   http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring   
  8.   /camel-spring.xsd">  
  9.   
  10.     <!-- 数据源 -->  
  11.     <bean id="dataSource"  
  12.         class="org.apache.commons.dbcp.BasicDataSource"  
  13.         destroy-method="close">  
  14.         <property name="driverClassName"  
  15.             value="oracle.jdbc.driver.OracleDriver" />  
  16.         <property name="url"  
  17.             value="jdbc:oracle:thin:@192.168.0.100:1521:ora10" />  
  18.         <property name="username" value="ceipportal" />  
  19.         <property name="password" value="ceipportal" />  
  20.     </bean>  
  21.   
  22.     <!-- Spring中的jdbc模型 -->  
  23.     <bean id="jdbcTemplate"  
  24.         class="org.springframework.jdbc.core.JdbcTemplate">  
  25.         <property name="dataSource">  
  26.             <ref bean="dataSource" />  
  27.         </property>  
  28.     </bean>  
  29.   
  30.     <!-- 配置connectionFactory -->  
  31.     <bean id="jmsFactory"  
  32.         class="org.apache.activemq.pool.PooledConnectionFactory"  
  33.         destroy-method="stop">  
  34.         <property name="connectionFactory">  
  35.             <bean  
  36.                 class="org.apache.activemq.ActiveMQConnectionFactory">  
  37.                 <property name="brokerURL">  
  38.                     <value>tcp://localhost:61616</value>  
  39.                 </property>  
  40.             </bean>  
  41.         </property>  
  42.     </bean>  
  43.   
  44.     <!-- Spring JMS Template -->  
  45.     <bean id="myJmsTemplate"  
  46.         class="org.springframework.jms.core.JmsTemplate">  
  47.         <property name="connectionFactory">  
  48.             <ref local="jmsFactory" />  
  49.         </property>  
  50.         <property name="defaultDestinationName" value="subject" />  
  51.         <property name="messageConverter" ref="conversion" />  
  52.         <!-- 区别它采用的模式为false是p2p为true是订阅 -->  
  53.         <property name="pubSubDomain" value="false" />  
  54.     </bean>  
  55.   
  56.     <!-- 读取信息 -->  
  57.     <bean id="consumer" class="org.spring.activeDemo01.Consumer">  
  58.         <property name="jdbcTemplate" ref="jdbcTemplate" />  
  59.         <property name="jmsTemplate" ref="myJmsTemplate" />  
  60.     </bean>  
  61.   
  62.     <!-- 发送信息 -->  
  63.     <bean id="producer" class="org.spring.activeDemo01.Producer">  
  64.         <property name="jmsTemplet" ref="myJmsTemplate" />  
  65.         <!--  <property name="destination" ref="destination"/>-->  
  66.         <!-- <property name="destinationName" value="subject"/>    -->  
  67.     </bean>  
  68.   
  69.     <!-- 消息监听     -->  
  70.     <bean id="listenerContainer"  
  71.         class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  72.         <property name="concurrentConsumers" value="5" />  
  73.         <property name="connectionFactory" ref="jmsFactory" />  
  74.         <property name="destinationName" value="subject" />  
  75.         <property name="messageListener" ref="consumer" />  
  76.     </bean>  
  77.   
  78.     <!-- 消息转换     -->  
  79.     <bean id="conversion"  
  80.         class="org.spring.activeDemo01.PaySettlementCoverter" />  
  81.   
  82.     <!-- POJO类 -->  
  83.     <bean id="hello" class="org.spring.activeDemo01.Hello" />  
  84. </beans>  

 发送信息类

Java代码 复制代码
  1. package org.spring.activeDemo01;   
  2. import org.springframework.jms.core.JmsTemplate;   
  3.   
  4. public class Producer{   
  5.     private JmsTemplate jmsTemplet = null ;   
  6.     public void setJmsTemplet(JmsTemplate jmsTemplet) {   
  7.         this.jmsTemplet = jmsTemplet;   
  8.     }   
  9.        
  10.     public void simpleSend(Hello h) {   
  11.         this.jmsTemplet.setDeliveryPersistent(true);   
  12.         this.jmsTemplet.convertAndSend(h);   
  13.     }   
  14. }  

 接收信息类

Java代码 复制代码
  1. public class Consumer implements MessageListener{   
  2.     private JdbcTemplate  jdbcTemplate;   
  3.     private JmsTemplate jmsTemplate;   
  4.     private static final String insert_sql = "insert into jms_queue_send (id, MessageID, MessageDetails) values (seq_jms_queue_id.nextval, ?,?)";   
  5.     public JdbcTemplate getJdbcTemplate() {   
  6.         return jdbcTemplate;   
  7.     }   
  8.        
  9.     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {   
  10.         this.jdbcTemplate = jdbcTemplate;   
  11.     }   
  12.   
  13.     public void onMessage(Message arg0) {   
  14.            
  15.         ActiveMQObjectMessage msg = (ActiveMQObjectMessage)arg0;   
  16.         try {   
  17.             System.out.print("From -->"+msg.getStringProperty("id"));   
  18.             System.out.println("-->"+msg.getStringProperty("hello"));   
  19.                
  20.             /*String insert_sql = "insert into jms_queue_send (id, MessageID, MessageDetails)" +  
  21.                                 " values (seq_jms_queue_id.nextval, '"+msg.getJMSMessageID()+"', '"+msg.getStringProperty("hello")+"')";      
  22.             jdbcTemplate.execute(insert_sql);*/  
  23.            
  24.         } catch (JMSException e) {   
  25.             e.printStackTrace();   
  26.         }   
  27.     }   
  28.   
  29.     public JmsTemplate getJmsTemplate() {   
  30.         return jmsTemplate;   
  31.     }   
  32.   
  33.     public void setJmsTemplate(JmsTemplate jmsTemplate) {   
  34.         this.jmsTemplate = jmsTemplate;   
  35.     }   
  36.   
  37. }  

 

消息转换类

Java代码 复制代码
  1. package org.spring.activeDemo01;   
  2.   
  3. import javax.jms.JMSException;   
  4. import javax.jms.Message;   
  5. import javax.jms.ObjectMessage;   
  6. import javax.jms.Session;   
  7. import org.springframework.jms.support.converter.MessageConversionException;   
  8. import org.springframework.jms.support.converter.MessageConverter;   
  9.   
  10. public class PaySettlementCoverter implements MessageConverter{   
  11.     public Object fromMessage(Message message) throws JMSException,   
  12.             MessageConversionException {   
  13.         ObjectMessage objMsg = (ObjectMessage)message;   
  14.         Hello hello = new Hello();   
  15.         hello.setId(objMsg.getStringProperty("id"));   
  16.         hello.setSaying(objMsg.getStringProperty("hello"));   
  17.         return hello;   
  18.     }   
  19.   
  20.     public Message toMessage(Object obj, Session session) throws JMSException,   
  21.             MessageConversionException {   
  22.         Hello hello = (Hello)obj;   
  23.         ObjectMessage objMsg = session.createObjectMessage();   
  24.         objMsg.setJMSCorrelationID("123654");   
  25.         objMsg.setJMSReplyTo(objMsg.getJMSDestination());   
  26.         objMsg.setStringProperty("id",hello.getId());   
  27.         objMsg.setStringProperty("hello",hello.getSaying());   
  28.         return objMsg;   
  29.     }   
  30. }  

 

POJO类

Java代码 复制代码
  1. public class Hello {     
  2.     /**  
  3.      *   
  4.      */  
  5.     private static final long serialVersionUID = 1L;   
  6.     private String id;     
  7.     private String saying;     
  8.     public String getId() {   
  9.         return id;   
  10.     }   
  11.     public void setId(String id) {   
  12.         this.id = id;   
  13.     }   
  14.     public String getSaying() {   
  15.         return saying;   
  16.     }   
  17.     public void setSaying(String saying) {   
  18.         this.saying = saying;   
  19.     }   
  20. }  

 

测试类

Java代码 复制代码
  1. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  2.   
  3. public class TestSender {   
  4.   
  5.     /**  
  6.      * @param args  
  7.      */  
  8.     public static void main(String[] args) {   
  9.         ClassPathXmlApplicationContext c = new ClassPathXmlApplicationContext("appliactionContext.xml");   
  10.         Producer d = (Producer)c.getBean("producer");   
  11.         Hello h = (Hello)c.getBean("hello");       
  12.         h.setId("123456789");   
  13.         h.setSaying("Hello World.....!!! ");   
  14.         d.simpleSend(h);   
  15.     }   
  16.   
  17. }  
原创粉丝点击