- 浏览: 17657 次
- 性别:
文章分类
最新评论
一 实验环境
1.jdk1.6
2.spring 2.5
3.apache-activemq-5.10.0
二 点对点消息模型的收发消息示例
负责发送消息的ProductService具体代码
负责接收消息的ConsumerService具体代码
在spring的配置文件中加入如下配置信息
运行ConsumerService 中的main方法效果如下
点对点的消息模型,除了上面的接收消息方法外Spring JMS提供了消息监听的模式代码和配置如下
在spring 的配置文件中配置监听容器以及侦听者
运行后的效果如下
二 主题消息模型的收发消息示例
负责发布主题(消息发布者)TopicProvider代码如下
负责接收已订阅的消息(消息监听者)
在spring 的配置中加入以下代码
运行TopicProvider中的main方法,效果如下
1.jdk1.6
2.spring 2.5
3.apache-activemq-5.10.0
二 点对点消息模型的收发消息示例
负责发送消息的ProductService具体代码
package com.testactivemq; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.jms.TextMessage; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; public class ProductService { private JmsTemplate jmsTemplate; /**** * 向默认队列发送信息,默认队列即是注入jmsTemplate中的消息队列 * @param msg * @return */ public void sendMessage(final String msg) { String destination = jmsTemplate.getDefaultDestination().toString(); System.out.println("向队列" +destination+ "发送了消息: " + msg); jmsTemplate.send(new MessageCreator() { public Message createMessage(Session session) throws JMSException { TextMessage tx=session.createTextMessage(); tx.setText(msg); return tx; } }); } /*** * 向指定队列发送消息 * @param destination * @param msg */ public void sendMessage(String destination,final String msg) { System.out.println("向队列" +destination+ "发送了消息:" + msg); jmsTemplate.send(destination, new MessageCreator() { public Message createMessage(Session session) throws JMSException { TextMessage tx=session.createTextMessage(); tx.setText(msg); return tx; } }); } public JmsTemplate getJmsTemplate() { return jmsTemplate; } public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } }
负责接收消息的ConsumerService具体代码
package com.testactivemq; import javax.jms.JMSException; import javax.jms.TextMessage; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; public class ConsumerService { private JmsTemplate jmsTemplate; /**** * 接收默认的消息 */ public void receive() { TextMessage tm = (TextMessage)jmsTemplate.receive(); String destinationName=jmsTemplate.getDefaultDestination().toString(); try { System.out.println("从队列" + destinationName + "收到了消息: "+tm.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /*** * 接收指定消息队列 * @param destination */ public void receive(String destination) { TextMessage tm = (TextMessage) jmsTemplate.receive(destination); try { System.out.println("从队列" + destination + "收到了消息:"+tm.getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { //读取spring配置文件的路径 ApplicationContext ac = new FileSystemXmlApplicationContext("F:\\workerspace\\MyTest\\WEB-INF\\classes\\applicationContext.xml"); ProductService ps= (ProductService) ac.getBean("productService"); ConsumerService cs1=(ConsumerService) ac.getBean("consumerService"); ps.sendMessage("哈哈"); cs1.receive(); //以下是从queue2队列发送和读取消息 ps.sendMessage("queue2", "萌萌达"); cs1.receive("queue2"); } public JmsTemplate getJmsTemplate() { return jmsTemplate; } public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } }
在spring的配置文件中加入如下配置信息
<!-- 配置JMS连接工厂 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:(tcp://localhost:61616)" /> </bean> <!-- 定义消息队列(Queue) --> <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 设置消息队列的名字 --> <constructor-arg> <value>queue1</value> </constructor-arg> </bean> <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="defaultDestination" ref="queueDestination" /> <property name="receiveTimeout" value="10000" /> </bean> <!-- 定义消息队列(Queue) --> <bean id="queueDestination2" class="org.apache.activemq.command.ActiveMQQueue"> <!-- 设置消息队列的名字 --> <constructor-arg> <value>queue2</value> </constructor-arg> </bean> <!--queue消息生产者 --> <bean id="productService" class="com.testactivemq.ProductService"> <property name="jmsTemplate" ref="jmsTemplate"></property> </bean> <!--queue消息消费者 --> <bean id="consumerService" class="com.testactivemq.ConsumerService"> <property name="jmsTemplate" ref="jmsTemplate"></property> </bean>
运行ConsumerService 中的main方法效果如下
点对点的消息模型,除了上面的接收消息方法外Spring JMS提供了消息监听的模式代码和配置如下
package com.testactivemq; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; public class QueueMessageListener implements MessageListener { //当收到消息时,自动调用该方法,运行后会一直停留在进程当中。 public void onMessage(Message message) { TextMessage tm = (TextMessage) message; try { String destination=tm.getJMSDestination().toString(); System.out.println("收到["+destination+"]文本消息:" + tm.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
在spring 的配置文件中配置监听容器以及侦听者
<!-- 配置消息队列监听者(Queue)--> <bean id="queueMessageListener" class="com.testactivemq.QueueMessageListener" /> <!-- 消息监听容器(Queue),配置连接工厂,监听的队列是queue2,监听器是前面定义的监听器 --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="queueDestination2" /> <property name="messageListener" ref="queueMessageListener" /> </bean>
public static void main(String[] args) { ApplicationContext ac = new FileSystemXmlApplicationContext("F:\\workerspace\\MyTest\\WEB-INF\\classes\\applicationContext.xml"); ProductService ps= (ProductService) ac.getBean("productService"); ConsumerService cs1=(ConsumerService) ac.getBean("consumerService"); //以下是从queue2队列发送消息,读取消息在QueueMessageListener 中的onMessage方法自动执行 ps.sendMessage("queue2", "萌萌达"); }
运行后的效果如下
二 主题消息模型的收发消息示例
负责发布主题(消息发布者)TopicProvider代码如下
package com.testactivemq; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; public class TopicProvider { private JmsTemplate topicJmsTemplate; /** * 向指定的topic发布消息 * * @param topic * @param msg */ public void publish(final String topic, final String msg) { topicJmsTemplate.send(topic, new MessageCreator() { public Message createMessage(Session session) throws JMSException { System.out.println("主题 是[" + topic + "],发布消息内容为: " + msg); return session.createTextMessage(msg); } }); } public static void main(String[] args) { ApplicationContext ac = new FileSystemXmlApplicationContext("F:\\workerspace\\MyTest\\WEB-INF\\classes\\applicationContext.xml"); TopicProvider tp= (TopicProvider) ac.getBean("topicProvider"); //test_topic为题的名称是主题的识别标志 tp.publish("test_topic", "么么达"); } public void setTopicJmsTemplate(JmsTemplate topicJmsTemplate) { this.topicJmsTemplate = topicJmsTemplate; } }
负责接收已订阅的消息(消息监听者)
package com.testactivemq; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** *和队列监听的代码一样。 */ public class TopicMessageListener implements MessageListener { public void onMessage(Message message) { TextMessage tm = (TextMessage) message; try { String destination=tm.getJMSDestination().toString(); System.out.println("收到["+destination+"],文本消息:" + tm.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
在spring 的配置中加入以下代码
<!-- 定义消息主题(Topic) --> <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg> <value>test_topic</value> </constructor-arg> </bean> <!-- 配置JMS模板(Topic),pubSubDomain="true"--> <bean id="topicJmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="defaultDestination" ref="topicDestination" /> <property name="pubSubDomain" value="true" /> <property name="receiveTimeout" value="10000" /> </bean> <!--topic消息发布者 --> <bean id="topicProvider" class="com.testactivemq.TopicProvider"> <property name="topicJmsTemplate" ref="topicJmsTemplate"></property> </bean> <!-- 消息主题监听者 和 主题监听容器 ,主题监听容器可以配置多个,即多个订阅者 --> <!-- 消息主题监听者(Topic) --> <bean id="topicMessageListener" class="com.testactivemq.TopicMessageListener" /> <!-- 主题监听容器 (Topic),订阅者1 --> <bean id="topicJmsContainer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="topicDestination" /> <property name="messageListener" ref="topicMessageListener" /> </bean> <!-- 主题监听容器 (Topic),订阅者2 --> <bean id="topicJmsContainer2" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="topicDestination" /> <property name="messageListener" ref="topicMessageListener" /> </bean>
运行TopicProvider中的main方法,效果如下
相关推荐
标题 "jms Spring+ActiveMQ 5.4.2" 涉及的是Java消息服务(JMS)在Spring框架中的应用,以及ActiveMQ作为消息代理的使用。在这个主题下,我们将深入探讨JMS的基本概念、Spring对JMS的支持以及ActiveMQ 5.4.2版本的...
在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一个全面的编程和配置模型,用于构建灵活、可维护的...这个完整的实例是一个很好的学习资源,可以帮助开发者更好地理解和实践Spring与ActiveMQ的整合。
本文将深入探讨如何在Spring 3.0中整合JMS与ActivemQ,以及它们在实际应用中的关键知识点。 首先,我们要了解Spring对JMS的支持。Spring通过其`org.springframework.jms`包提供了丰富的JMS抽象,简化了JMS的使用。...
详细内容: SpringJMS整合ActiveMQ.doc 详细说明文档 apache-activemq-5.8.0-bin.zip ActiveMQ安装包 JMSTest.rar MyEclipse8.5下web工程
通过阅读和理解这些代码,你可以更好地了解Spring与ActiveMQ结合使用时的具体实现细节。 总的来说,通过Spring与ActiveMQ的整合,我们可以构建出可靠、高效的消息队列系统,从而改善系统的响应时间,提高可扩展性和...
本案例将详细讲解如何将Spring与ActiveMQ整合,以提升系统的可扩展性和解耦性。 1. **Spring框架**:Spring是一个全方位的开发框架,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...
本文将深入探讨如何将Spring与ActiveMQ进行整合,以提升系统的可扩展性和解耦性。 一、Spring与ActiveMQ整合基础 1. **消息中间件概念**:消息中间件是一种软件,它在不同的应用之间传递消息,实现了应用之间的...
在本篇ActiveMQ学习笔记中,我们将探讨JMS(Java Message Service)与Spring框架的集成。JMS是一种标准API,用于在分布式环境中进行异步消息传递,而Spring框架则为开发人员提供了强大的依赖注入和管理服务的能力。...
Spring与ActiveMQ的集成,不仅简化了JMS消息的处理流程,还提高了系统的可扩展性和可靠性。通过上述步骤,开发者可以轻松地在自己的应用中实现消息队列的功能,无论是用于任务调度、异步处理还是分布式系统之间的...
综上所述,Spring与ActiveMQ的结合使用能帮助开发者构建高效、可靠的分布式系统,通过消息队列进行异步通信,提高了系统的并发能力和容错性。在实际项目中,可以根据具体需求调整配置和代码,实现复杂的消息处理场景...
5. **事务管理**: 如果需要确保消息的一致性,可以结合Spring的事务管理功能,将消息发送与业务操作置于同一个事务中。 6. **测试和优化**: 测试消息系统的可靠性、性能和容错能力,根据需要进行调整和优化。 在...
接下来,**Spring与ActiveMQ的集成**:在Spring应用中配置ActiveMQ,通常需要在Spring配置文件中定义`JmsTemplate`和`DefaultMessageListenerContainer`。`JmsTemplate`用于发送消息,而`...
当我们谈论Spring与ActiveMQ的整合时,主要涉及的是Spring的JMS模块。这个模块允许我们轻松地与消息中间件如ActiveMQ进行交互,从而实现解耦和异步处理。下面将详细介绍这个整合过程中的关键知识点: 1. **JMS...
本文将详细探讨Spring与ActiveMQ的整合过程,以及相关的知识点。 1. **Spring框架**:Spring是Java开发中的一个全功能框架,提供依赖注入(Dependency Injection)、面向切面编程(AOP)、事务管理等核心功能,广泛...
现在,我们将深入探讨如何将Spring与ActiveMQ整合,并使用Maven进行项目构建。 首先,我们需要理解Spring与ActiveMQ整合的基本概念。Spring通过其`spring-jms`模块提供了对JMS的支持,可以方便地与消息代理如...
当我们谈到"多个Spring和ActiveMQ结合的项目"时,这意味着我们正在探讨如何在多个Spring应用中集成ActiveMQ来实现高效的通信和数据交换。 首先,Spring框架提供了一个名为Spring Integration的模块,它支持与各种...
将ActiveMQ与Spring整合,可以方便地在Spring应用中使用JMS,实现消息驱动的架构。 本文将深入探讨ActiveMQ与Spring整合的关键知识点: 1. **Spring对JMS的支持**: Spring提供了`org.springframework.jms`包,该...
总之,"spring配置activemq详解"是一个涵盖Spring与ActiveMQ整合的深度话题,涉及了从项目配置到消息生产和消费的全过程。通过理解和实践这些知识点,开发者能够构建出稳定、高效的分布式消息处理系统。