【RabbitMQ与SpringBoot集成测试收发消息】

【RabbitMQ与SpringBoot集成测试收发消息】

一、环境说明

  1. 安装环境:虚拟机VMWare + Centos7.6 + Maven3.6.3 + JDK1.8
  2. RabbitMQ版本:rabbitmq-server-3.8.8-1.el7.noarch.rpm
  3. 编程工具Idea + 运行JDK为17

二、实验步骤

  1. 在RabbitMQ的UI界面或命令行上创建新的Virtual Host,取名为vhtest02,如下图所示:

  2. 使用Idea的Spring Initializr创建生产者工程springrabbitmqtest,坐标如下:

  3. 配置application.properties,可参考添加如下内容:

    xml 复制代码
    spring.rabbitmq.host=192.168.36.132
    spring.rabbitmq.port=5672
    spring.rabbitmq.virtual-host=vhtest02
    spring.rabbitmq.username=sujiangming
    spring.rabbitmq.password=openGauss@1234

    根据你自己的环境改成你自己的ip、port、virtual-host、用户名和密码。

  4. 编写生产者配置类,用于创建Exchange、Queue以及将两者绑定在一起,代码如下:

    类名为:com.rabbitmq.springboot.config.RabbitMqConfig,代码如下所示:

    java 复制代码
    package com.rabbitmq.springboot.config;
    
    import org.springframework.amqp.core.*;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RabbitMqConfig {
        //创建交换机
        @Bean(name = "topicExchange")
        public TopicExchange topicExchange(){
            return new TopicExchange("springboot_topic_exchange");
        }
    
        //创建队列
        @Bean(name = "topicQueueSpringBoot")
        public Queue topicQueue(){
            return QueueBuilder.durable("springboot_topic_queue").build();
        }
    
        //队列绑定交换机
        @Bean
        public Binding bindingExchangeTopicQueue(@Qualifier("topicQueueSpringBoot") Queue queue,
                                                 @Qualifier("topicExchange")Exchange exchange){
            return BindingBuilder.bind(queue).to(exchange).with("log.#").noargs();
        }
    }
  5. 修改com.rabbitmq.springboot.SpringRabbitMqTestApplicationTests类,添加注解和测试方法,具体代码如下:

    java 复制代码
    package com.rabbitmq.springboot;
    
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    class SpringRabbitMqTestApplicationTests {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @Test
        public void testSendMessage() throws InterruptedException {
            //convertAndSend(交换机名称,路由key,消息内容)
            int temp = 0;
            while (true){
                rabbitTemplate.convertAndSend("springboot_topic_exchange","log.info","发送了info消息" + temp);
                rabbitTemplate.convertAndSend("springboot_topic_exchange","log.error","发送了error消息"+ temp);
                rabbitTemplate.convertAndSend("springboot_topic_exchange","log.warning","发送了warning消息"+ temp);
                temp++;
                Thread.sleep(2000);
            }
        }
        
        @Test
        void contextLoads() {
        }
    
    }

    该程序会一直运行,因为我加了while(true),模拟用户一直产生数据。

  6. 运行测试:运行com.rabbitmq.springboot.SpringRabbitMqTestApplicationTests类中的方法testSendMessage(),正常运行会看到如下内容:

  7. 编写消费者工程,具体创建工程如步骤2所示;

  8. 修改application.properties,如步骤3所示,可直接复步骤3内容即可;

  9. 创建监听类:com.rabbitmq.consumer.listener.MessageListener,用于监听某个队列的消息,一旦监听到有数据,立马进行消费,代码如下:

    java 复制代码
    package com.rabbitmq.consumer.listener;
    
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    /**
     * 消息监听器
     */
    @Component
    public class MessageListener {
        /**
         * 监听某个队列的消息
         * @param msg 接收到的消息
         */
        @RabbitListener(queues = "springboot_topic_queue")
        public void topicListener(String msg){
            System.out.println("接收到消息:" + msg);
        }
    }
  10. 修改启动类:SpringbootRabbitmqConsumerApplication,在其类上面添加注解@ComponentScan("com.rabbitmq.consumer.*"),如不添加该注解运行会自动退出,修改好如下图所示:

  11. 运行测试:运行SpringbootRabbitmqConsumerApplication类,正常情况下会看到如下内容:

三、小结

本文参考了来自网络上的资料,如有侵权,请及时联系博主进行删除。本文仅是博主本人在学习过程中作为学习笔记使用,常言道:好记性不如烂笔头。如本文对您有所帮助,请您动动发财的手指给博主点个赞,谢谢您的阅读~~~

相关推荐
weixin_4365250726 分钟前
Spring Boot 集成 EasyExcel 的最佳实践:优雅实现 Excel 导入导出
java·spring boot·后端
ChinaRainbowSea29 分钟前
9. LangChain4j + 整合 Spring Boot
java·人工智能·spring boot·后端·spring·langchain·ai编程
武昌库里写JAVA39 分钟前
Mac下Python3安装
java·vue.js·spring boot·sql·学习
Light601 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度(一气呵成)
linux·spring boot·pdf·gpcl6/ghostpcl·s3/oss·权限与审计·异步与进度
召摇2 小时前
Spring Boot 内置工具类深度指南
java·spring boot
Moshow郑锴4 小时前
SpringBootCodeGenerator使用JSqlParser解析DDL CREATE SQL 语句
spring boot·后端·sql
小沈同学呀10 小时前
创建一个Spring Boot Starter风格的Basic认证SDK
java·spring boot·后端
凤山老林12 小时前
SpringBoot 轻量级一站式日志可视化与JVM监控
jvm·spring boot·后端
Chan1613 小时前
JVM从入门到实战:从字节码组成、类生命周期到双亲委派及打破双亲委派机制
java·jvm·spring boot·后端·intellij-idea