zoukankan      html  css  js  c++  java
  • Spring整合ActiveMQ,实现队列主题消息生产消费

    1、引入依赖

    pom.xml

     1     <!-- activemq -->
     2         <dependency>
     3             <groupId>org.springframework</groupId>
     4             <artifactId>spring-jms</artifactId>
     5             <version>4.3.23.RELEASE</version>
     6         </dependency>
     7 
     8         <dependency>
     9             <groupId>org.apache.activemq</groupId>
    10             <artifactId>activemq-pool</artifactId>
    11             <version>5.15.9</version>
    12         </dependency>

    2、配置属性文件

    activemq.properties
    activemq_url=tcp://192.168.0.102:61616
    activemq_username=admin
    activemq_password=admin
    

      

    3、在com.activemq包下增加监听类  

    MyMessageListener.java   (队列、主题消费者接收代码)

    package com.activemq;
    
    import org.springframework.stereotype.Component;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    /**
     * 自定义监听类 
    * 记得加上注解@Component * @author 。 */ @Component public class MyMessageListener implements MessageListener { @Override public void onMessage(Message message) { if (null!=message && message instanceof TextMessage){ TextMessage textMessage= (TextMessage) message; try { System.out.println(textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } } }

    4、编写配置文件(需要把该配置加入Spring管理中,这里不再说明)

    spring-activemq.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"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
             ">
    
        <context:annotation-config/>
        <!--扫描类所在位置-->
        <context:component-scan base-package="com.activemq"/>
    
        <!-- 读取配置文件 -->
        <bean id="propertyPlaceholderConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <array>
                    <!-- activemq.properties所在文件路径-->
                    <value>/WEB-INF/config/activemq.properties</value>
                </array>
            </property>
        </bean>
    
        <!--配置生产者-->
        <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
            <property name="connectionFactory">
                <!--真正可以产生Connection的ConnectionFactory,由对应的jms服务厂商提供-->
                <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                    <property name="brokerURL" value="${activemq_url}"/>
                    <!--连接的账号密码,没有密码可以不写-->
                    <property name="userName" value="${activemq_username}"/>
                    <property name="password" value="${activemq_password}"/>
                </bean>
            </property>
            <!--最大连接数-->
            <property name="maxConnections" value="100"></property>
        </bean>
    
        <!--这个是队列目的地,点对点的-->
        <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
            <!--queue是对应名字,这里根据自己的填写-->
            <constructor-arg index="0" value="queue"/>
        </bean>
    
        <!--这个是主题-->
        <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg index="0" value="topic"/>
        </bean>
    
        <!--Spring提供的JMS工具类,进行消息发送、接收-->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="jmsFactory"/>
            <!--
            这里的值destinationQueue对应上面的<bean id="destinationQueue"
            如果这里的值写 destinationQueue 表示是队列
            如果这里的值写 destinationTopic 表示这个是主题
            以上可以根据具体的需要更改
            -->
            <property name="defaultDestination" ref="destinationQueue"/>
            <property name="messageConverter">
                <!--消息类型的转换-->
                <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
            </property>
        </bean>
    
        <!--配置监听程序,只需要启动生产者 消费者不用启动,自动会监听记录-->
        <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="jmsFactory"/>
            <!--
            这里的值destinationQueue对应上面的<bean id="destinationQueue"
            如果这里的值写 destinationQueue 表示是队列消费监听
            如果这里的值写 destinationTopic 表示这个是主题消费监听
            以上可以根据具体的需要更改
            -->
            <property name="destination" ref="destinationQueue"/>
            <!--myMessageListener是在上面配置的base-package="com.activemq" 包下的配置类-->
            <property name="messageListener" ref="myMessageListener"/>
        </bean>
    
    
    </beans>

    3、队列、主题生产者生产代码 (不可直接使用,需自行调用send()方法)

    package com.queue.activemq;
    
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.web.context.ContextLoader;
    import org.springframework.web.context.WebApplicationContext;
    
    import javax.jms.TextMessage;
    
    public class Produce {
    
        private JmsTemplate jmsTemplate;
    
        public void send() {
            WebApplicationContext webctx = ContextLoader.getCurrentWebApplicationContext();
            this.jmsTemplate = (JmsTemplate) webctx.getBean("jmsTemplate");
            /*队列生产者*/
            jmsTemplate.send(session1 -> {
                TextMessage textMessage = session1.createTextMessage("发送的消息内容");
                return textMessage;
            });
        }
    
    
    }
    
    
  • 相关阅读:
    查询用户表及表结构
    动态页面静态化(转)
    轻松实现 Killer 级应用 Snap (转)
    继续认识OpenID——Benefits of OpenID (转自http://openid.net/getanopenid/individuals/)
    7 Difference Between RIA and Traditional Web Application(转载)
    解决了MovieClip缩略图问题
    Understanding Flex Print Job from A to Z (彻底了解FlexPrintJob)(精彩转载)
    Using Flex Buildin Print Function(Flex 打印功能系列转载)
    StackOverflow is an OpenIDenabled site??Why OpenID?What is OpenID?
    MovieClip实现拖拽等移动位置的功能
  • 原文地址:https://www.cnblogs.com/pxblog/p/12615773.html
Copyright © 2011-2022 走看看