spring 使用 ActiveMQ,JMS使用

2 篇文章 0 订阅
2 篇文章 0 订阅

 MS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。

ConnectionFactory 是连接工厂,负责创建Connection。

Connection 负责创建 Session。

Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。

Destination 是消息的目的地。

 

下载 apache-activemq-5.3.0。http://activemq.apache.org/download.html,解压,

然后双击 bin/activemq.bat。运行后,可以在 http://localhost:8161/admin 观察。

也有 demo, http://localhost:8161/demo。把 activemq-all-5.3.0.jar 加入 classpath。

 

一  ActiveMQ的jms写法 

  1  消息发送类  

    

Java代码   收藏代码
  1. public class JMSsenderBean {  
  2.     public static void main(String[] args) throws Exception {    
  3.         //连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。  
  4.         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");    
  5.         // JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的    
  6.         Connection connection = connectionFactory.createConnection();  
  7.         //开启连接  
  8.         connection.start();    
  9.         Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  
  10.         Destination destination = session.createQueue("my-queue");    
  11.         MessageProducer producer = session.createProducer(destination);    
  12.         for(int i=0; i<3; i++) {    
  13.             MapMessage message = session.createMapMessage();    
  14.             message.setLong("count"new Date().getTime());    
  15.             Thread.sleep(1000);  
  16.             //通过消息生产者发出消息    
  17.             producer.send(message);    
  18.         }    
  19.         session.commit();    
  20.         session.close();    
  21.         connection.close();    
  22.     }    
  23.  }  

 

  2 消息接收类

  

Java代码   收藏代码
  1. import javax.jms.Connection;  
  2. import javax.jms.ConnectionFactory;  
  3. import javax.jms.Destination;  
  4. import javax.jms.MapMessage;  
  5. import javax.jms.MessageConsumer;  
  6. import javax.jms.Session;  
  7.   
  8. import org.apache.activemq.ActiveMQConnectionFactory;  
  9. //消息接收类   
  10. public class JMSreceive {  
  11.     public static void main(String[] args) throws Exception {    
  12.         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");    
  13.         
  14.         Connection connection = connectionFactory.createConnection();    
  15.         connection.start();    
  16.         
  17.         final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);    
  18.         Destination destination = session.createQueue("my-queue");    
  19.         MessageConsumer consumer = session.createConsumer(destination);    
  20.         /*//listener 方式  
  21.         consumer.setMessageListener(new MessageListener() {  
  22.       
  23.             public void onMessage(Message msg) {  
  24.                 MapMessage message = (MapMessage) msg;  
  25.                 //TODO something....  
  26.                 System.out.println("收到消息:" + new Date(message.getLong("count")));  
  27.                 session.commit();  
  28.             }  
  29.         });  
  30.         Thread.sleep(30000);  
  31.         */    
  32.         int i=0;    
  33.         while(i<3) {    
  34.             i++;    
  35.             MapMessage message = (MapMessage) consumer.receive();    
  36.             session.commit();    
  37.             System.out.println("收到消息:" + new Date(message.getLong("count")));    
  38.         }    
  39.         
  40.         session.close();    
  41.         connection.close();    
  42.     }    
  43. }  

 

 

二 spring集成

  

   1 spring 配置文件

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  3.         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">    
  4.     
  5. <!-- 在非 web / ejb 容器中使用 pool 时,要手动 stop,spring 不会为你执行 destroy-method 的方法    
  6.     <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">    
  7.         <property name="connectionFactory">    
  8.             <bean class="org.apache.activemq.ActiveMQConnectionFactory">    
  9.                 <property name="brokerURL" value="tcp://localhost:61616" />    
  10.             </bean>    
  11.         </property>    
  12.     </bean>    
  13. -->    
  14.     <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">    
  15.         <property name="brokerURL" value="tcp://localhost:61616" />    
  16.     </bean>   
  17.   
  18.     <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">    
  19.         <constructor-arg index="0" value="my-queue" />    
  20.     </bean>    
  21.       
  22.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">    
  23.         <property name="connectionFactory" ref="jmsFactory" />    
  24.         <property name="defaultDestination" ref="destination" />    
  25.         <property name="messageConverter">    
  26.             <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />    
  27.         </property>    
  28.     </bean>    
  29. </beans>   

 

 2   消息发送类

Java代码   收藏代码
  1. import java.util.Date;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.MapMessage;  
  5. import javax.jms.Session;  
  6. import javax.mail.Message;  
  7.   
  8. import org.springframework.context.ApplicationContext;  
  9. import org.springframework.context.support.FileSystemXmlApplicationContext;  
  10. import org.springframework.jms.core.JmsTemplate;  
  11. import org.springframework.jms.core.MessageCreator;  
  12.   
  13. public class JMSsenderBean_Spring {  
  14.     public static void main(String[] args) {    
  15.         ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:spring/applicationContext-jmx.xml");    
  16.         
  17.         JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");    
  18.         
  19.         jmsTemplate.send(new MessageCreator() {    
  20.         
  21.             public MapMessage createMessage(Session session) throws JMSException {   
  22.                   
  23.                 MapMessage mm = session.createMapMessage();    
  24.                 mm.setLong("count"new Date().getTime());  
  25.                   
  26.                 return mm;    
  27.             }    
  28.         
  29.         });    
  30.     }     
  31.  }  

 3  消息接收类

  

Java代码   收藏代码
  1. import java.util.Date;  
  2. import java.util.Map;  
  3.   
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.support.FileSystemXmlApplicationContext;  
  6. import org.springframework.jms.core.JmsTemplate;  
  7.   
  8. public class JMSreceive_Spring {  
  9.     public static void main(String[] args) {    
  10.         ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:spring/applicationContext-jmx.xml");    
  11.         
  12.         JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");    
  13.         while(true) {    
  14.             Map<String, Object> mm =  (Map<String, Object>) jmsTemplate.receiveAndConvert();    
  15.             System.out.println("收到消息:" + new Date((Long)mm.get("count")));  
  16.               
  17.         }    
  18.     }   
  19. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值