• RabbitMQ系列【5】Spring Boot 整合RabbitMQ


    有道无术,术尚可求,有术无道,止于术。

    前言

    Spring BootRabbitMQ也提供了自动配置和启动器。

    中文文档地址

    1. 环境搭建

    创建一个 Spring Boot基础工程,引入依赖:

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-amqpartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    该依赖中,引入了spring-rabbit
    在这里插入图片描述

    2. 基本信息配置

    RabbitProperties配置类中,可以看到很多相关配置:
    在这里插入图片描述
    最重要当然是配置MQ 的地址、端口、用户名、密码,可以使用两种方式配置:

    spring:
      rabbitmq:
        addresses: amqp://guest:guest@localhost
        port: 5672
    # 或者
    spring:
      rabbitmq:
        username: guest
        password: guest
        host: localhost
        port: 5672
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    虚拟机配置,虚拟机以/开头,默认为/

    spring:
      rabbitmq:
        virtual-host: /
    
    • 1
    • 2
    • 3

    3. 创建交换机和队列

    使用ExchangeBuilder 创建交换机,可以创建四种类型的交换机,如下图:
    在这里插入图片描述
    按照相似的方式创建队列、绑定。

    @Configuration
    public class RabbitMqConfig {
    
        /**
         * 使用 ExchangeBuilder 创建交换机
         *
         */
        @Bean("bootExchange")
        public Exchange bootExchange() {
            return ExchangeBuilder.directExchange("bootExchange").durable(true).build();
        }
    
        /**
         * 创建队列
         */
        @Bean("bootQueue")
        public Queue bootQueue() {
            return QueueBuilder.durable("bootQueue").build();
        }
    
        /**
         * 创建队列和交换机的绑定关系
         */
        @Bean("bootBinding")
        public Binding bootBinding(@Qualifier("bootQueue") Queue bootQueue, @Qualifier("bootExchange") Exchange bootExchange) {
            return BindingBuilder.bind(bootQueue).to(bootExchange).with("boot.key").and(null);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    启动项目,进入控制台,可以看到相关信息:
    在这里插入图片描述

    4. 消费者

    使用@RabbitListener注解标记在方法上,并指定队列名,方法入参Message

    @Component
    public class RabbitConsumer {
    
        @RabbitListener(queues = {"bootQueue"})
        public void rabbitListener(Message message) {
            System.out.println("收到消息===" + message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Message 对象是Sring 集成RabbirMQ 提供的消息装载体,主要包含了消息二进制数据body 和消息属性MessageProperties
    在这里插入图片描述

    5. 生产者

    创建一个生产者,使用RabbitTemplate 直接将消息发送到指定的交换机,并指定其路由KEY

    @SpringBootTest
    public class MqTest {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @Test
        public void testRabbitPub() {
            rabbitTemplate.convertAndSend("bootExchange","boot.key","HELLO SPRING BOOT");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    测试

    启动项目,可以看到打印了连接日志:
    在这里插入图片描述
    发送消息,并成功接收到消息,消息包含了消息本身内容和消息属性
    在这里插入图片描述

  • 相关阅读:
    GBase 8a更新全文索引
    Vue简介&入门&Vue事件&生命周期
    基于YOLOv8模型的船只目标检测系统(PyTorch+Pyside6+YOLOv8模型)
    ELK部署
    Python每日一练——第9天:选择排序【含动图展示】
    16. QML中的一些粒子特效
    端到端拥塞控制的本质
    科技云报道:产业为根大模型应用为擎,容联云推动企业营销服场景重塑
    隐私计算迎来“开源革命”,高质量项目有哪些?
    请问上传失败原因以及调整方法
  • 原文地址:https://blog.csdn.net/qq_43437874/article/details/127764021