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

目录

  • [★ Spring Boot 为 RabbitMQ 提供的自动配置](#★ Spring Boot 为 RabbitMQ 提供的自动配置)
    • [▲ 自动配置类:RabbitAutoConfiguration](#▲ 自动配置类:RabbitAutoConfiguration)
    • [▲ 属性处理类:RabbitProperties](#▲ 属性处理类:RabbitProperties)
    • 相关配置
  • [★ AmqpAdmin的方法](#★ AmqpAdmin的方法)
  • [★ AmqpTemplate的方法](#★ AmqpTemplate的方法)
  • 代码演示

★ 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的简单包装。

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

静态内部类:RabbitConnectionFactoryCreator:

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

静态内部类: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就不会自动配置了。



▲ 属性处理类:RabbitProperties

复制代码
  属性处理类:RabbitProperties:

 该属性处理类除了可配置host、port、password、username等基本属性之外,

 还可以配置spring.rabbitmq.ssl.*开头的属性,用于配置SSL连接相关keyStore、trustStore等相关信息。
 还可以配置spring.rabbitmq.cache.*开头的属性,用于配置缓存相关信息。
 还可以配置spring.rabbitmq.listener.*开头的属性,用于配置和消息监听器的容器工厂相关的属性

 还可以配置spring.rabbitmq.template.*开头的属性,用于配置和RabbitTemplate相关的属性

相关配置

★ 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):解除绑定。

★ 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消息队列。

代码演示

创建一个springboot的项目。

application.properties 配置属性


java 复制代码
# 配置连接 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
相关推荐
用户8307196840821 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解2 小时前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解2 小时前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记6 小时前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者1 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840821 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解1 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
用户8307196840822 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者2 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺2 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端