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;
            });
        }
    
    
    }
    
    
  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/pxblog/p/12615773.html
Copyright © 2011-2022 走看看