SpringBoot整合RabbitMQ

本文详细介绍了如何使用SpringBoot框架与RabbitMQ进行集成,包括创建Maven工程、添加依赖、配置简单模式和Topic模式的交换机、队列及监听器,以及编写单元测试。
摘要由CSDN通过智能技术生成

一、SpringBoot 框架部署

  1. 创建Maven工程

  2. 在项目里创建两个子工程

    • Producer 消息生产者
    • Consumer 消息消费者
  3. 在主项目工程的pom文件里填写依赖

    <!--Spring Boot依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.8.RELEASE</version>
    </parent>
    <dependencies>
        <!--spring-boot-starter-amqp依赖 [重要]-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
        
        <!--下面三个依赖是为了方便控制台输出Log [一般]-->
        <!--junit:junit 单元测试框架 用了都说好-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
        
        <!--org.projectlombok:lombok 整合注解-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        
        <!--ch.qos.logback:logback-classic 日志框架-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        
        <!--spring-boot-starter-test SpringBootTest-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
    </dependencies>
    
  4. 分别在两个子项目中创建application.yml文件

    spring:
      rabbitmq:
        host: localhost
        port: 5672
        virtual-host: /
        username: username
        password: password
    server:
      port:
    
  5. Producer生产者创建启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 生产者启动类
     */
    @SpringBootApplication
    public class ProviderRabbitApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderRabbitApplication.class,args);
        }
    }
    
  6. Consumer生产者创建启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 消费者启动类
     */
    @SpringBootApplication
    public class ConsumerRabbitMqApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConsumerRabbitMqApplication.class,args);
        }
    }
    

二、HelloWorld 简单模式

  1. 创建RabbitMqConfig.java文件 绑定交换机和队列

    import org.springframework.amqp.core.*;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * RabbitMq 配置类
     */
    @Configuration
    public class RabbitMqConfig {
        public static final String SIMPLE_EXCHANGE_NAME = "simple_exchange";
        public static final String SIMPLE_QUEUE_NAME = "simple_queue";
    
        /**
         * 创建 交换机
         * @return
         */
        @Bean
        public Exchange simpleExchange(){
            return ExchangeBuilder.topicExchange(SIMPLE_EXCHANGE_NAME).build();
        }
    
        /**
         * 创建 队列
         * @return
         */
        @Bean
        public Queue simpleQueue(){
            return QueueBuilder.durable(SIMPLE_QUEUE_NAME).build();
        }
    
        /**
         * 绑定 交换机与队列
         * @param exchange
         * @param queue
         * @return
         */
        @Bean
        public Binding itemQueueExchange(@Qualifier("simpleExchange") Exchange exchange, @Qualifier("simplQueue") Queue queue){
            return BindingBuilder.bind(queue).to(exchange).with("").noargs();
        }
    }
    
  2. 创建ConsumerListener.java监听消息文件

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    import lombok.extern.slf4j.Slf4j;
    
    @Component
    @Slf4j
    public class ConsumerListener {
        /**
         * 监听某个队列的消息
         * @param message 接收到的消息
         */
        @RabbitListener(queuesToDeclare = "simple_queue")
        public void myListener(String message){
            //不用在手动转UTF-8 Spring自动转好了
            log.debug("消费者接收到的消息为:{}", message);
        }
    }
    
  3. 创建ProducerTest.java测试文件

    import lombok.extern.slf4j.Slf4j;
    import com.itheima.rabbitmq.config.RabbitMQConfig;
    import org.junit.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;
    import javax.annotation.Resource;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Slf4j
    public class RabbitMQTest {
    
        @Resource
        private RabbitTemplate rabbitTemplate;
    
        @Test
        public void sendTest(){
            rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"","测试 SpringBoot整合RabbitMq的普通模式");
        }
    }
    
  4. 测试

    首先运行一次ProducerTest.java测试类 创建交换机和队列

    然后在启动消费者监听器

三、Topic 通配符模式

  1. 创建RabbitMqConfig.java文件 绑定交换机和队列

    import org.springframework.amqp.core.*;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * RabbitMq 配置类
     */
    @Configuration
    public class RabbitMqConfig {
        private static final String TOPIC_EXCHANGE_NAME = "topic_exchange";
        private static final String TOPIC_QUEUE_NAME = "topic_queue";
    
        /**
         * 创建 交换机
         * @return
         */
        @Bean
        public Exchange itemTopicExchange(){
            return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE_NAME).build();
        }
    
        /**
         * 创建 队列
         * @return
         */
        @Bean
        public Queue itemQueue(){
            return QueueBuilder.durable(TOPIC_QUEUE_NAME).build();
        }
    
        /**
         * 绑定 交换机与队列
         * @param exchange
         * @param queue
         * @return
         */
        @Bean
        public Binding itemQueueExchange(@Qualifier("itemTopicExchange") Exchange exchange, @Qualifier("itemQueue") Queue queue){
            return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs();
        }
    
    }
    
  2. 创建ConsumerListener.java监听消息文件

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    import lombok.extern.slf4j.Slf4j;
    
    @Component
    @Slf4j
    public class ConsumerListener {
        /**
         * 监听某个队列的消息
         * @param message 接收到的消息
         */
        @RabbitListener(queuesToDeclare = "topic_queue")
        public void myListener(String message){
            //不用在手动转UTF-8 Spring自动转好了
            log.debug("消费者接收到的消息为:{}", message);
        }
        
    }
    
  3. 创建ProducerTest.java测试文件

    import lombok.extern.slf4j.Slf4j;
    import com.itheima.rabbitmq.config.RabbitMQConfig;
    import org.junit.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;
    import javax.annotation.Resource;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Slf4j
    public class RabbitMQTest {
    
        @Resource
        private RabbitTemplate rabbitTemplate;
    
        @Test
        public void sendTest(){
            rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"item.insert","topic通配符模式,RoutingKey:item.insert");
            rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"item.delete.yes","topic通配符模式,RoutingKey:item.delete.yes");
            rabbitTemplate.convertAndSend(RabbitMqConfig.TOPIC_EXCHANGE_NAME,"null.null","topic通配符模式,RoutingKey:null.null");
        }
    }
    
  4. 测试

    首先运行一次ProducerTest.java测试类 创建交换机和队列

    然后在启动消费者监听器

Spring Boot框架可以很容易地与RabbitMQ进行集成。为了实现这个目标,你需要在项目的依赖项中添加两个关键的依赖项。首先,你需要添加spring-boot-starter-amqp依赖项,它提供了与RabbitMQ进行通信的必要类和方法。其次,你还需要添加spring-boot-starter-web依赖项,以便在项目中使用Web功能。 在你的项目中创建两个Spring Boot应用程序,一个是RabbitMQ的生产者,另一个是消费者。通过这两个应用程序,你可以实现消息的发送和接收。生产者应用程序负责将消息发送到RabbitMQ的消息队列,而消费者应用程序则负责从队列中接收并处理消息。这样,你就可以实现基于RabbitMQ的消息传递系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合RabbitMQ](https://blog.csdn.net/K_kzj_K/article/details/106642250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Springboot 整合RabbitMq ,用心看完这一篇就够了](https://blog.csdn.net/qq_35387940/article/details/100514134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讓丄帝愛伱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值