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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

★ 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 ARabbitTemplateConfigurer它负责对容器中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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: SpringRabbitMQ