• 206、SpringBoot 整合 RabbitMQ 的自动配置类 和 对应的属性处理类 的知识点


    ★ Spring Boot 为 RabbitMQ 提供的自动配置

    ▲ Spring Boot 提供了一个 spring-boot-starter-amqp 的Starter来支持RabbitMQ,只要添加该Starter,它就会添加 spring-rabbit 依赖库(它有传递依赖了amqp-client.jar)

    ▲ 只要类加载路径下包含了 spring-rabbit 依赖库,
    Spring Boot 会自动配置 CachingConnectionFactory
    (CachingConnectionFactory:带缓存的连接工厂,由 RabbitConnectionFactoryCreator 负责)、

    还会自动配置 AmqpAdmin 和 AmqpTemplate
    (实际上就是RabbitTemplate,由RabbitTemplateConfiguration负责)。

    AmqpAdmin 负责管理Exchange、队列和绑定。
    AmqpTemplate 负责发送、接收消息。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    ▲ 自动配置类:RabbitAutoConfiguration

    自动配置类:RabbitAutoConfiguration

     ——只有当RabbitTemplate(位于spring-rabbit.jar包中), 
             Channel(位于amqp-client.jar中)两个类存在时,该自动配置类才会生效。
    
     该自动配置类配置了 RabbitMessagingTemplate,该Bean只是对RabbitTemplate的简单包装。
    
    • 1
    • 2
    • 3
    • 4

    上面RabbitAutoConfiguration自动配置类包含如下的两个静态内部类(配置类)

    静态内部类:RabbitConnectionFactoryCreator:

    它的作用就是在容器中配置一个 CachingConnectionFactory ,
    而 CachingConnectionFactory 对 RabbitMQ 原生的 ConnectionFactory 进行包装,增加了缓存功能。
    
    • 1
    • 2

    静态内部类:RabbitTemplateConfiguration:

    它的作用是在容器中配置了3个Bean:
    
    Bean A:RabbitTemplateConfigurer,它负责对容器中RabbitTemplate进行定制。 
            该Bean可以被取代,开发者一旦在容器中配置了自己的RabbitTemplateConfigurer,
            它就会取代该Bean。
    
    Bean B: RabbitTemplate:它就是一个AmqpTemplate。
             如果开发者配置了自己的 RabbitTemplate,自动配置的RabbitTemplate就失效。
    
                         AmqpTemplate
                               ↑
                         RabbitOperations
                               ↑
                         RabbitTemplate
    
    Bean C: AmqpAdmin:如果开发者配置了自己的AmqpAdmin,自动配置的AmqpAdmin就失效。
             但如果你将spring.rabbitmq.dynamic属性指定为false,那么该AmqpAdmin就不会自动配置了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    ▲ 属性处理类:RabbitProperties

      属性处理类:RabbitProperties:
    
     该属性处理类除了可配置host、port、password、username等基本属性之外,
    
     还可以配置spring.rabbitmq.ssl.*开头的属性,用于配置SSL连接相关keyStore、trustStore等相关信息。
     还可以配置spring.rabbitmq.cache.*开头的属性,用于配置缓存相关信息。
     还可以配置spring.rabbitmq.listener.*开头的属性,用于配置和消息监听器的容器工厂相关的属性
    
     还可以配置spring.rabbitmq.template.*开头的属性,用于配置和RabbitTemplate相关的属性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    相关配置

    在这里插入图片描述

    在这里插入图片描述

    ★ AmqpAdmin的方法

    它主要就是提供了一些管理Exchange、Queue、绑定相关的方法。

     - void declareExchange(Exchange exchange):声明Exchange。
     - String declareQueue(Queue queue):声明队列。
     - Queue declareQueue():声明由服务器命名、独占的、自动删除的、非持久化的队列。
     - declareBinding(Binding binding):声明队列或Exchange与Exchange的绑定。
     - boolean deleteExchange(String exchangeName):删除Exchange。
     - boolean deleteQueue(String queueName):无条件地删除队列
     - void deleteQueue(String queueName, boolean unused, boolean empty):
       删除队列,只有当该队列不再使用、且没有消息时才删除。
     - void removeBinding(Binding binding):解除绑定。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    ★ AmqpTemplate的方法

    它主要就是提供了一些发送消息的方法。

    - convertAndSend(String exchange, String routingKey, Object message, MessagePostProcessor messagePostProcessor):
      自动将messag参数转换成消息、发送给exchange。
      在发送之前,还可通过messagePostProcessor参数对消息进行修改。
      
    - convertSendAndReceive(String exchange, String routingKey, Object message, MessagePostProcessor messagePostProcessor):
      该方法发送消息之后会等待返回的消息。
    
    - send(String exchange, String routingKey, Message message):发送消息。
    
    - sendAndReceive(String exchange, String routingKey, Message message):
      该方法发送消息之后会等待返回的消息
    
    - receive(String queueName, long timeoutMillis):指定从queueName队列接收消息。 
      备注:一般不会通过该方法来接收消息,而是推荐使用消息监听器、以异步的方式来接收消息。
    
    剩下的事情,就是将AmqpAdmin、AmqpTemplate注入程序组件(Service),
    然后程序组件即可通过它们来操作RabbitMQ消息队列。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    代码演示

    创建一个springboot的项目。

    在这里插入图片描述

    application.properties 配置属性

    在这里插入图片描述
    在这里插入图片描述

    # 配置连接 RabbitMQ 的基本信息------------------------------------------------------
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    # 下面属性可配置多个以逗号隔开的连接地址,一旦配置了该属性,host 和 port 属性就会被忽略
    # spring.rabbitmq.addresses=
    spring.rabbitmq.username=ljh
    spring.rabbitmq.password=123456
    # 连接虚拟主机
    spring.rabbitmq.virtual-host=my-vhost01
    
    # 配置RabbitMQ的缓存相关信息--------------------------------------------------------
    # 指定缓存 connection ,还是缓存 channel
    spring.rabbitmq.cache.connection.mode=channel
    # 指定可以缓存多少个 Channel
    spring.rabbitmq.cache.channel.size=50
    # 如果选择的缓存模式是 connection , 那么就可以配置如下属性
    # spring.rabbitmq.cache.connection.size=15
    
    # 配置 和 RabbitTemplate 相关的属性--------------------------------------------------
    # 指定 RabbitTemplate 发送消息失败时会重新尝试
    spring.rabbitmq.template.retry.enabled=true
    # RabbitTemplate 发送消息失败后每隔1秒重新尝试发送消息
    spring.rabbitmq.template.retry.initial-interval=1s
    # RabbitTemplate 发送消息失败时,最多尝试重新发送消息的次数
    spring.rabbitmq.template.retry.max-attempts=5
    # 设置每次尝试重新发送消息的时间间隔是一个等比数列:1s, 2s, 4s, 8s, 16s
    # 第一次等1s后尝试,第二次等2s后尝试,第三次等4s后尝试重新发送消息......
    spring.rabbitmq.template.retry.multiplier=2
    # 指定发送消息时默认的Exchange名
    spring.rabbitmq.template.exchange=""
    # 指定发送消息时默认的路由key
    spring.rabbitmq.template.routing-key="test"
    
    # 配置和消息监听器的容器工厂相关的属性--------------------------------------------------
    # 指定监听器容器工厂的类型
    spring.rabbitmq.listener.type=simple
    # 指定消息的确认模式
    spring.rabbitmq.listener.simple.acknowledge-mode=auto
    
    
    • 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
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    银行基于Dell EMC ECS对象存储架构的应用实践手册
    Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解
    循环神经网络(RNN)简单介绍及实现(基于表面肌电信号)
    Debian12安装.NET7 SDK
    The Last Naruto,兼容IE11的vue脚手架
    语言的未来:深度学习在自然语言处理中的革命
    【C语言学习笔记(七)】C语言重定向输入与输出
    Spring实战系列(二)Bean装配
    Spring 九大事务失效场景分析
    JAVA开发学习-day21
  • 原文地址:https://blog.csdn.net/weixin_44411039/article/details/133820930