• rabbitMQ_integeration_spring(七)


    参考了其他博主的资料,整理成完整的代码,直接拷贝就可以测试。

    一、创建一个properties文件

    mq.host=127.0.0.1
    mq.username=root
    mq.password=root
    mq.port=5672
    mq.vhost=testmq

    mq.vhost表示rabbitMQ虚拟主机,类似一台电脑里面划分了多个虚拟主机,每个虚拟主机都可以有交换器,队列,感觉又类似于一种命令空间。

    创建的虚拟主机的可以使用rabbitMQ的工具rabbitmqctl

    在命令行中键入rabbitmqctl add_vhost testmq即可创建这个虚拟主机,

    创建root用户,rabbitmqctl add_user root root,

    创建了虚拟主机之后还需要给root用户授权,授权命令

    rabbitmqctl set_permissions -p testmq root .* .* .*

    二、spring配置文件和pom.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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:rabbit="http://www.springframework.org/schema/rabbit"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/rabbit
            http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <context:property-placeholder location="classpath:rabbitmq-config.properties" />
        
        <context:component-scan base-package="com.rabbitMQ"></context:component-scan>
        <!-- 配置监听器 -->
        <bean id="queueListenter" class="com.rabbitMQ.listener.QueueListenter"></bean>
        
       <rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}" /> <rabbit:admin id="admin" connection-factory="connectionFactory" /> <!-- spring template声明 --> <rabbit:template exchange="test-mq-exchange" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" /> <!-- 消息对象json转换类 --> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /> <!-- 声明一个队列 --> <rabbit:queue id="test_queue_key" name="test_queue_key" durable="true" auto-delete="false" exclusive="false" /> <!-- 声明一个直接转发器 --> <rabbit:direct-exchange name="test-mq-exchange" durable="true" auto-delete="false" id="test-mq-exchange"> <rabbit:bindings> <rabbit:binding queue="test_queue_key" key="test_queue_key" /> </rabbit:bindings> </rabbit:direct-exchange>
    <!-- 注册监听器 --> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="test_queue_key" ref="queueListenter" /> </rabbit:listener-container> </beans>

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.rabbitMQ</groupId>
        <artifactId>rabbitMQ_integerationSpring</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>rabbitMQ_integerationSpring Maven Webapp</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <spring.version>4.3.7.RELEASE</spring.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>com.rabbitmq</groupId>
                <artifactId>amqp-client</artifactId>
                <version>4.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit</artifactId>
                <version>1.7.1.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.20</version>
            </dependency>
    
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.6</version>
            </dependency>
    
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.6</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            
    
        </dependencies>
        <build>
            <finalName>rabbitMQ_integerationSpring</finalName>
        </build>
    </project>

    三、监听器,实现MessageListener接口

    package com.rabbitMQ.listener;
    
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.MessageListener;
    
    public class QueueListenter implements MessageListener {
    
        @Override
        public void onMessage(Message msg) {
            try{
                System.out.println(msg.toString());
                System.out.println(new String(msg.getBody()));
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
    }

    四、定义一个接口

    package com.rabbitMQ.service;
    
    public interface MQProducer {
      /**
       * 发送消息到指定队列
       * @param queueKey
       * @param object
       */
      public void sendDataToQueue(String queueKey, Object object);
    }

    五、实现MQProducer接口

    package com.rabbitMQ.service.impl;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.amqp.core.AmqpTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.rabbitMQ.service.MQProducer;
    
    @Service
    public class MQProducerImpl implements MQProducer {
        @Autowired
        private AmqpTemplate amqpTemplate;
    
        private final static Logger LOGGER = LoggerFactory.getLogger(MQProducerImpl.class);
    
        @Override
        public void sendDataToQueue(String queueKey, Object object) {
            try {
                //将Java对象转换为消息发送到匹配Key的交换机中Exchange,由于配置了JSON转换,这里是将Java对象转换成JSON字符串的形式。
                amqpTemplate.convertAndSend(queueKey, object);
            } catch (Exception e) {
                LOGGER.error(e.getMessage());
            }
    
        }
    }

    六、测试

    package com.rabbitMQ.test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.rabbitMQ.service.MQProducer;
    
    @RunWith(value = SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {
        "classpath:application-mq.xml"})
    
    public class TestQueue{
        @Autowired
        MQProducer mqProducer;
    
        final String queue_key = "test_queue_key";
    
        @Test
        public void send(){
            Map<String,Object> msg = new HashMap<String, Object>();
            msg.put("data","hello,rabbmitmq!");
            mqProducer.sendDataToQueue(queue_key,msg);
        }
    }
  • 相关阅读:
    oracle 闪回操作--区别于快照
    easyui 低版本下拉多选框绑定onChange事件样式失真问题
    kvm虚拟机网络配置-网桥
    CentOS7.5使用KVM创建虚拟机
    梦醒时分
    姑娘
    Ventoy+WePE 装机教程
    PG-SSL安全配置
    转载-如何做一份完善的补丁分析
    网络流24题部分题解
  • 原文地址:https://www.cnblogs.com/honger/p/6985276.html
Copyright © 2020-2023  润新知