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
相关推荐
张某布响丸辣1 分钟前
探索消息中间件:RabbitMQ深度解析
分布式·rabbitmq
wclass-zhengge21 分钟前
RabbitMQ篇(死信交换机)
分布式·rabbitmq
2402_8575893627 分钟前
Spring Boot新闻推荐系统设计与实现
java·spring boot·后端
CoderJia程序员甲38 分钟前
重学SpringBoot3-集成Redis(四)之Redisson
java·spring boot·redis·缓存
sco528239 分钟前
SpringBoot 集成 Ehcache 实现本地缓存
java·spring boot·后端
原机小子1 小时前
在线教育的未来:SpringBoot技术实现
java·spring boot·后端
慕明翰1 小时前
Springboot集成JSP报 404
java·开发语言·spring boot
小小娥子1 小时前
【Redis】Hash类型的常用命令
数据库·spring boot·redis
黄尚圈圈2 小时前
快速理解mQ(三)——RabbitMQ 各种交换机的区别与应用
分布式·rabbitmq
2401_857439693 小时前
“衣依”服装销售平台:Spring Boot技术应用与优化
spring boot·后端·mfc