• activeMQ和spring的整合


    http://www.cnblogs.com/shuai-server/p/8966299.html  这篇博客中介绍了activemq传递消息的两种方式,今天分享的是activemq框架和spring框架的整合使用。

    (1)导入activemq的核心jar包和整合spring需要的两个jar包  context-support和jms.jar(使用spring的版本是4.2.7 activemq的版本是5.11.2)

    <!--锁定版本号-->
    <properties>
      <spring.version>4.2.4.RELEASE</spring.version>
      <activemq.version>5.11.2</activemq.version>
    </properties>

    <!--添加依赖-->
    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>

    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-all</artifactId>
    </dependency>

    (2)activemq整合spring,首先需要配置connectionFactory

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
    
    
        <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
        <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://192.168.25.168:61616" />
        </bean>
        <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
        <bean id="connectionFactory"
            class="org.springframework.jms.connection.SingleConnectionFactory">
            <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
            <property name="targetConnectionFactory" ref="targetConnectionFactory" />
        </bean>
    </beans>

    (3)配置生产者对象

    使用jmsTemplate对象,发送消息

    <!-- 配置生产者 -->
        <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
            <property name="connectionFactory" ref="connectionFactory" />
        </bean>

    (4)在spring中配置Destination(有两种方式:队列 queue和主题 topic)

    <!--这个是队列目的地,点对点的 -->
        <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
            <constructor-arg>
                <value>spring-queue</value>
            </constructor-arg>
        </bean>
        <!--这个是主题目的地,一对多的 -->
        <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg value="topic" />
        </bean>

    (5)可以进行junit进行测试发送消息

    @Test
        public void testSpringActiveMq() throws Exception {
            //初始化spring容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
            //从spring容器中获得JmsTemplate对象
            JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
            //从spring容器中取Destination对象
            Destination destination = (Destination) applicationContext.getBean("queueDestination");
            //使用JmsTemplate对象发送消息。
            jmsTemplate.send(destination, new MessageCreator() {
                
                @Override
                public Message createMessage(Session session) throws JMSException {
                    //创建一个消息对象并返回
                    TextMessage textMessage = session.createTextMessage("spring activemq queue message");
                    return textMessage;
                }
            });
        }

    (6)接收消息

    第一步:需要自定义messagerListener的实现类

    public class MyMessageListener implements MessageListener {
    
        @Override
        public void onMessage(Message message) {
            
            try {
                TextMessage textMessage = (TextMessage) message;
                //取消息内容
                String text = textMessage.getText();
                System.out.println(text);
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    
    }

    第二步:在spring容器中配置自定义的消息监听对象

        <!-- 接收消息 -->
        <!-- 配置监听器 -->
        <bean id="myMessageListener" class="cn.e3mall.search.listener.MyMessageListener" />
        <!-- 消息监听容器,属性中引用的对象要和生产者的一致 -->
        <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory" />
            <property name="destination" ref="queueDestination" />
            <property name="messageListener" ref="myMessageListener" />
        </bean>

    第三步:初始化一个spring容器,等待接收消息

    @Test
        public void testQueueConsumer() throws Exception {
            //初始化spring容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
            //等待
            System.in.read();
        }

    至此,spring和activemq的整合过程完毕。需要注意的是activemq的新版本中核心jar包中集成了spring框架中的一些方法,但是不是太全,建议大家选择版本的时候注意。

  • 相关阅读:
    传输中文的乱码的原因及解决方式(两次encodeURI())转码;
    git密码配置
    后台界面设计之表单设计规范参考
    RDIFramework.NET开发框架在线表单设计整合工作流程的使用
    Electron,可以将web网页程序包装成桌面应用
    分布式/微服务必配APM系统,SkyWalking让你不迷路
    终端篇——Terminal三剑客之zsh
    高性能IO之Reactor模式
    uTools 你的办公利器
    JAVA 工具类库推荐 HuTool
  • 原文地址:https://www.cnblogs.com/shuai-server/p/8974479.html
Copyright © 2020-2023  润新知