`

springJMS+activeMQ实践

 
阅读更多
linux上安装activeMQ   http://blog.163.com/yangzhanghui_job/blog/static/17957506220127171173225/
ActiveMQ-5.8.0 安装和启动 http://chenzhou123520.iteye.com/blog/1915287
在CentOS Linux下部署Activemq 5 http://sunbean.blog.51cto.com/972509/675529





原文:http://my.oschina.net/wangrikui/blog/471714
运行环境:jdk1.6 ,javaEE5 , spring2.5 ,activeMQ5.4.3.

一定要注意activeMQ的版本与jdk的兼容性,最新的activeMQ版本估计要在jdk1.7以上才能运行。

先说一下activeMQ的安装:

1、下载:http://activemq.apache.org/download.html 选择合适的Windows版本

2、安装

(1) 首先配置JAVA环境变量

JAVA_HOME=D:\Program Files\Java\jdk1.5.0

CLASSPAHT=.;%JAVA_HOME%\lib

PATH=%JAVA_HOME%\bin;

(2)直接解压至任意目录(例如:D:\apache-activemq-5.3.0)

3、启动ActiveMQ服务器:直接运行\bin\win32\activemq.bat

当运行成功后,界面显示: Started SelectChannelConnector@0.0.0.0:8161 即说明activemq启动成功。

4、打开ActiveMQ消息管理后台系统 http://localhost:8161/admin/



需要依赖的jar包有:spring.jar , activemq-all-5.4.3.jar , commons-logging-api-1.1.jar , commons-io-1.3.2.jar



好了,准备工作做完后,开始上代码,

先看一下,我们最终的Spring配置文件applicationContext.xml的内容,如下所示:
 <?xml version="1.0" encoding="UTF-8"?> 
<beans          
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:jee="http://www.springframework.org/schema/jee"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  
 <!-- jms 连接工厂 -->
    <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <!-- 配置代理的地址,即配置activeMQ的连接URI,
         让jms工厂能够连接到activeMQ服务器(将activeMQ暴露给客户端使用,
         负责客户端与activeMQ之间的连接通信) -->
        <property name="brokerURL">
            <value>tcp://localhost:61616</value><!-- 一种标准URI地址,意思是说标识一个本地的端口号位61616的TCP连接(其中,"61616"是activeMQ默认的连接端口号) -->
        </property>
    </bean>
    <!-- ActiveMQ连接器将这种简单等级结构的URI模式称为低等级的连接器(low-levelconnectors),
     并为这些连接器实现了基本的网络通信协议。低等级连接器URIs使用主题(scheme)标识底层使用的网络协议,
     使用路径元素定位网络资源服务(一般为主机名加上端口号),使用查询元素用来确定连接器附加信息。 -->
 
    <!-- jms 连接池 -->
     
    <!--  
    <bean id="pooledJmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
    </bean>
    -->
 <!-- jms 模板 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <ref local="jmsFactory" />
        </property>
    </bean>
     
    <!-- jms Topic -->
    <bean id="myTopic" class="org.apache.activemq.command.ActiveMQTopic"
        autowire="constructor">
        <constructor-arg value="STOCKS.JAVA" />
    </bean>
 
    <!-- jms Consumer -->
    <bean id="javaConsumer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsFactory" />
        <property name="destination" ref="myTopic" />
        <property name="messageListener" ref="myTextListener" />
    </bean>
 
 <!-- 消息监听器 -->
    <bean id="myTextListener" class="demo.TextListener">
    </bean>
     
    <!-- 消息发布器 -->
    <bean id="springPublisher" class="demo.SpringPublisher">
        <property name="template">
            <ref local="jmsTemplate" />
        </property>
        <property name="topic">
            <ref local="myTopic" />
        </property>
    </bean>
</beans>

接下来,消息生成器代码,实现spring的MessageCreator接口:
package demo;
import java.util.Date;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.MessageCreator;
public class MyMessageCreator implements MessageCreator {
 /**
     * 消息序号
     */
    private int msgNo;
  
    public MyMessageCreator(int no) {
        this.msgNo = no;
    }
     
 @Override
 public Message createMessage(Session session) throws JMSException {
  TextMessage textMsg = session.createTextMessage();
        textMsg.setText(new Date() + "第" + this.msgNo + "条消息发出");
  
        return textMsg;
 }
 
}

接下来,消息监听器,实现javaEE的规范MessageListener接口即可,因为要注入到spring的DefaultMessageListenerContainer中。此监听器通过监听来自destination(在spring中配置)的消息,一旦有消息就打印出来:
package demo;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class TextListener implements MessageListener {
 @Override
 public void onMessage(Message message) {
  TextMessage msg = null;
    
        try {
            if (message instanceof TextMessage) {
                msg = (TextMessage) message;
                System.out.println("Reading message: " + msg.getText());
            } else {
                System.out.println("Message of wrong type: "
                        + message.getClass().getName());
            }
        } catch (JMSException e) {
            System.out.println("JMSException in onMessage(): " + e.toString());
        } catch (Throwable t) {
            System.out.println("Exception in onMessage():" + t.getMessage());
        }
 }
}

下面是消息发布器,通过spring的jms模板,即可轻松的获得与activeMQ的连接与通信,从而获得Connection和Destination,再通过JmsTemplate的send方法,即可发送消息到指定的destination(在spring中配置)中,以供客户端接收:
package demo;
import javax.jms.Destination;
import org.springframework.jms.core.JmsTemplate;
public class SpringPublisher {
 /**
     * Jms模板
     */
    private JmsTemplate template;
  
    /**
     * Topic
     */
    private Destination topic;
  
    public JmsTemplate getTemplate() {
        return template;
    }
  
    public void setTemplate(JmsTemplate template) {
        this.template = template;
    }
  
    public Destination getTopic() {
        return topic;
    }
  
    public void setTopic(Destination topic) {
        this.topic = topic;
    }
  
    /**
     * Start
     * 
     * @throws InterruptedException
     */
    public void start() throws InterruptedException {
  
        int messageCount = 10;
  
        while ((--messageCount) > 0) {
            sendMessage(messageCount);
            Thread.sleep(1000);
        }
    }
  
    /**
     * 消息发送
     */
    protected void sendMessage(int msgNO) {
  
        this.template.send(this.topic, new MyMessageCreator(msgNO));
    }
}

至此,基本的jms就已经搭建好了,很简单吧,一个spring上下文配置,一个消息生成器,一个消息发布器,一个监听器,搞定。接下来,编写一个测试类,看运行结果(注意在运行测试类前,一定要先启动activeMQ服务器):
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import demo.SpringPublisher;
public class SpringJmsTestMain {
 /**
  * @param args
  */
 public static void main(String[] args) throws InterruptedException {
    
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
  
        SpringPublisher publisher = (SpringPublisher) context
                .getBean("springPublisher");
        publisher.start();
    }
}

运行结果如下:
Reading message: Sun Jun 28 19:40:05 CST 2015第9条消息发出
Reading message: Sun Jun 28 19:40:06 CST 2015第8条消息发出
Reading message: Sun Jun 28 19:40:07 CST 2015第7条消息发出
Reading message: Sun Jun 28 19:40:08 CST 2015第6条消息发出
Reading message: Sun Jun 28 19:40:09 CST 2015第5条消息发出
Reading message: Sun Jun 28 19:40:10 CST 2015第4条消息发出
Reading message: Sun Jun 28 19:40:12 CST 2015第3条消息发出
Reading message: Sun Jun 28 19:40:13 CST 2015第2条消息发出
Reading message: Sun Jun 28 19:40:14 CST 2015第1条消息发出
分享到:
评论

相关推荐

    JMS+activeMQ消息中间件

    综上所述,这个例子提供了一个全面的实践,涵盖了Spring MVC、JMS和ActiveMQ的集成,帮助开发者理解如何在实际项目中使用消息中间件实现异步处理和解耦。通过学习这个示例,你可以了解到如何在Spring MVC环境中配置...

    jms Spring+ActiveMQ 5.4.2

    标题中的“jms Spring+ActiveMQ 5.4.2”指的是Java消息服务(Java Message Service)在Spring框架中与Apache ActiveMQ 5.4.2版本的集成应用。Java消息服务(JMS)是Java平台中用于创建、发送、接收和读取消息的标准...

    学习用Java写一个聊天室,spring4.2.5+mybatis+mysql+shiro+activemq+html5.zip

    ActiveMQ 是Apache出品的一款开源消息中间件,它实现了Java消息服务(JMS)。在聊天室应用中,ActiveMQ将作为异步通信的桥梁,处理用户的实时消息发送和接收,确保消息的可靠传输和高并发处理。 最后,HTML5是现代...

    基于Springboot+ActiveMQ事务==本地事件表+activemq.zip

    ActiveMQ是Apache提供的一个开源消息代理,它实现了多种消息协议,如AMQP、JMS(Java Message Service)等。在分布式事务中,ActiveMQ起到了消息中间件的角色,用于在不同服务之间传递事务信息,确保消息的可靠传输...

    Spring MVC + JPA + MQ + redis +activemq 集成项目实例

    **ActiveMQ** 是Apache出品的一个开源消息中间件,支持多种协议,如JMS(Java Message Service)、AMQP等。它允许应用程序之间通过消息传递进行通信,提供可靠的消息传输和发布/订阅模型。在高并发场景下,ActiveMQ...

    activemq学习(2) spring+activemq

    Spring框架提供了一套完整的JMS支持,包括配置和管理消息生产者(Message Producers)、消费者(Message Consumers)以及与ActiveMQ服务器的连接。这通常通过Spring的XML配置文件或者Java配置类来实现。 1. **配置...

    spring+activeMQ 嵌入式配置 完整demo(包含jar包)

    这个完整的demo可以帮助开发者快速理解并实践Spring与ActiveMQ的集成,为构建高效、可靠的分布式系统奠定基础。 在实际应用中,可能还需要考虑更多因素,例如消息的持久化、事务性消息、消息确认机制等。不过,这个...

    Spring和ActiveMQ整合的完整实例

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一个全面的编程和配置模型,用于构建灵活、可维护的...这个完整的实例是一个很好的学习资源,可以帮助开发者更好地理解和实践Spring与ActiveMQ的整合。

    基于web的农业温湿度监控系统,SpringMVC+Spring+MyBatis+WebSocket+ActiveMQ.zip

    5. **ActiveMQ**:ActiveMQ是Apache的一个开源消息中间件,实现了多种消息协议,如JMS(Java Message Service)。在这个系统中,ActiveMQ可能被用来处理大量并发的温湿度数据,通过消息队列进行数据缓冲,保证数据的...

    Apache+ActiveMQ教程

    集成Apache ActiveMQ与Spring框架是常见的实践,因为Spring提供了一套完整的JMS支持。通过Spring的JmsTemplate和MessageListener容器,我们可以轻松地发送和消费消息,同时保持代码的简洁性和可测试性。Spring的自动...

    SpringBoot + activeMQ.zip

    而ActiveMQ则是Apache软件基金会的一个开源项目,它是Java消息服务(JMS)的实现,提供可靠的消息传递,支持多种协议,广泛用于分布式系统中的异步通信。 标题"SpringBoot + activeMQ.zip"暗示了这个压缩包内容可能...

    activeMQ+spring+springmvc整合示例

    在IT行业中,集成ActiveMQ、Spring以及Spring MVC是构建高效、可扩展的Web应用程序的常见实践。这个"activeMQ+spring+springmvc整合示例"旨在帮助开发者理解如何将这三者结合,以实现消息队列(Message Queue)的...

    ActiveMQ+Camel+Spring+jms Demo(一)

    **ActiveMQ+Camel+Spring+jms Demo(一)** 在IT行业中,集成不同组件以构建高效、可扩展的消息传递系统是一项常见的任务。本示例将深入探讨如何使用ActiveMQ作为消息中间件,Apache Camel作为集成工具,以及Spring...

    SpringMVC+JMS(ActiveMQ)整合的Demo

    在IT行业中,SpringMVC和JMS...总之,SpringMVC+JMS(ActiveMQ)整合的Demo是一个实用的教学工具,它涵盖了现代企业级应用中常见的消息传递模式和技术,对于提升开发者在分布式系统中的实践技能有着积极的促进作用。

    ActiveMQ+Camel+Spring+jms Demo(二)

    在本项目中,我们探索了如何整合ActiveMQ、Apache Camel和Spring框架来创建一个基于JMS(Java消息服务)的应用程序。这个Demo是系列的第二部分,它建立在上一部分的基础之上,深入介绍了如何实际操作这些组件以实现...

    JMS-activemq 实例(分ppt,eclipse工程,说明三部分)

    总结来说,这个压缩包文件提供了全面的学习资源,涵盖了理论讲解(PPTX)、实践操作指导(Readme)以及可运行的示例代码(Eclipse工程),对于想要了解和掌握JMS与ActiveMQ的开发者来说,是一个非常宝贵的资源。...

    新手配置TOMCAT6.0+ActiveMq5.1+Spriing2.5

    1. 在Spring配置文件中添加对ActiveMQ的JMS配置,如ConnectionFactory和Destination。 2. 创建消息生产者和消费者,利用Spring的JmsTemplate发送和接收消息。 **步骤5:测试与调试** 1. 编写测试代码,验证消息的...

    spring整合JMS-居于ActiveMQ实现

    Spring整合JMS基于ActiveMQ实现是一项常见的企业级应用开发任务,它涉及到Spring框架、Java消息服务(JMS)以及ActiveMQ消息中间件的使用。在本文中,我们将深入探讨这三个关键概念,以及如何将它们有效地结合在一起...

    Spring集成ActiveMQ配置

    Spring集成ActiveMQ配置详解 Spring框架与ActiveMQ的集成,为...然而,值得注意的是,随着技术的发展,Spring和ActiveMQ的版本也在不断更新,因此,在实际项目中,应当根据最新的文档和实践来进行相应的调整和优化。

Global site tag (gtag.js) - Google Analytics