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

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

上面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 配置属性

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

# 配置连接 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_L_J_H_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值