Spring配置ActiveMQ持久化发布、订阅Topic

通过Spring对ActiveMQ进行配置开发,发布订阅模式,支持消息的持久化。

需要Spring2.5版本以上,如果有多个订阅者,每个订阅者需要指定不同的 clientId 。

 

发布者的配置:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
  7.          http://www.springframework.org/schema/context    
  8.          http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  9.   
  10.     <!-- 配置JMS连接工厂 -->  
  11.     <bean id="myConnectionFactory"  
  12.         class="org.springframework.jms.connection.CachingConnectionFactory">  
  13.         <!-- Session缓存数量 -->  
  14.         <property name="sessionCacheSize" value="10" />  
  15.         <property name="targetConnectionFactory">  
  16.             <bean class="org.apache.activemq.ActiveMQConnectionFactory">  
  17.                 <!-- MQ地址 -->  
  18.                 <property name="brokerURL" value="tcp://localhost:61616" />  
  19.                  <!-- 是否异步发送 -->  
  20.                 <property name="useAsyncSend" value="true" />  
  21.             </bean>  
  22.         </property>  
  23.     </bean>  
  24.   
  25.     <!-- 发送消息的目的地(一个主题) -->  
  26.     <bean id="myDestination" class="org.apache.activemq.command.ActiveMQTopic">  
  27.         <!-- 设置消息主题的名字 -->  
  28.         <constructor-arg index="0" value="Online.Notice.Topic" />  
  29.     </bean>  
  30.   
  31.     <!-- 配置JMS模版 -->  
  32.     <bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  33.         <property name="connectionFactory" ref="myConnectionFactory" />  
  34.         <property name="defaultDestination" ref="myDestination" />  
  35.         <!-- 订阅发布模式 -->  
  36.         <property name="pubSubDomain" value="true" />  
  37.         <property name="receiveTimeout" value="10000" />  
  38.     </bean>  
  39. </beans>  

 

 

发布者的代码:

 

Java代码   收藏代码
  1. package com.xikang.jms;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.Session;  
  6. import javax.jms.TextMessage;  
  7.   
  8. import org.springframework.context.ApplicationContext;  
  9. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  10. import org.springframework.jms.core.JmsTemplate;  
  11. import org.springframework.jms.core.MessageCreator;  
  12.   
  13. public class SimpleJMSSender {  
  14.   
  15.     public static void main(String[] args) {  
  16.         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-send.xml");  
  17.           
  18.         JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("myJmsTemplate");  
  19.         for (int i = 0; i < 10; i++) {  
  20.             jmsTemplate.send(new MessageCreator() {  
  21.                 public Message createMessage(Session session) throws JMSException {  
  22.                     TextMessage msg = session.createTextMessage();  
  23.                     // 设置消息属性  
  24.                     msg.setStringProperty("phrCode""C001");  
  25.                     // 设置消息内容  
  26.                     msg.setText("Hello World!");  
  27.                     return msg;  
  28.                 }  
  29.             });  
  30.         }  
  31.     }  
  32. }  

 

 

订阅者的配置:

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
  7.          http://www.springframework.org/schema/context    
  8.          http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  9.   
  10.     <!-- 配置JMS连接工厂 -->  
  11.     <bean id="myConnectionFactory"  
  12.         class="org.springframework.jms.connection.CachingConnectionFactory">  
  13.         <!-- Session缓存数量 -->  
  14.         <property name="sessionCacheSize" value="10" />  
  15.         <!-- 接收者ID -->  
  16.         <property name="clientId" value="client_119" />  
  17.         <property name="targetConnectionFactory">  
  18.             <bean class="org.apache.activemq.ActiveMQConnectionFactory">  
  19.                 <!-- MQ地址 -->  
  20.                 <property name="brokerURL" value="tcp://localhost:61616" />  
  21.             </bean>  
  22.         </property>  
  23.     </bean>  
  24.   
  25.     <!-- 发送消息的目的地(一个主题) -->  
  26.     <bean id="myDestination" class="org.apache.activemq.command.ActiveMQTopic">  
  27.         <!-- 设置消息主题的名字 -->  
  28.         <constructor-arg index="0" value="Online.Notice.Topic" />  
  29.     </bean>  
  30.   
  31.     <!-- 生产消息配置 (自己定义)-->  
  32.     <bean id="myTopicConsumer" class="com.xikang.jms.SimpleJMSReceiver" />  
  33.   
  34.     <!-- 消息监听器 -->  
  35.     <bean id="myTopicListener"  
  36.         class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
  37.         <constructor-arg ref="myTopicConsumer" />  
  38.         <!-- 接收消息的方法名称 -->  
  39.         <property name="defaultListenerMethod" value="receive" />  
  40.         <!-- 不进行消息转换 -->  
  41.         <property name="messageConverter"><null/></property>  
  42.     </bean>  
  43.   
  44.     <!-- 消息监听容器 -->  
  45.     <bean id="myListenerContainer"  
  46.         class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  47.         <property name="connectionFactory" ref="myConnectionFactory" />  
  48.         <!-- 发布订阅模式 -->  
  49.         <property name="pubSubDomain" value="true"/>  
  50.         <!-- 消息持久化 -->  
  51.         <property name="subscriptionDurable" value="true"/>  
  52.         <property name="receiveTimeout" value="10000"/>  
  53.         <!-- 接收者ID -->  
  54.         <property name="clientId" value="client_119" />  
  55.         <property name="durableSubscriptionName" value="client_119"/>  
  56.         <property name="destination" ref="myDestination" />  
  57.         <property name="messageListener" ref="myTopicListener" />  
  58.     </bean>  
  59.   
  60. </beans>  

 

 

订阅者的代码:

 

Java代码   收藏代码
  1. package com.xikang.jms;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.TextMessage;  
  5.   
  6. import org.springframework.context.ApplicationContext;  
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  8. import org.springframework.jms.JmsException;  
  9.   
  10. public class SimpleJMSReceiver {  
  11.   
  12.     public static void main(String[] args) {  
  13.         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-receive.xml");  
  14.         while(true) {  
  15.         }  
  16.     }  
  17.       
  18.     public void receive(TextMessage message) throws JmsException, JMSException {  
  19.         System.out.println(message.getStringProperty("phrCode"));  
  20.         System.out.println(message.getText());  
  21.     }  
  22. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值