SpringAMQP(十三)

什么是SpringAMQP

  • SpringAMQP的官方地址https://spring.io/projects/spring-amqp
  • AMQP(Advanced Message Queuing Protocol):是用于在应用程序或之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
  • Spring AMQP:Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两部分,其中spring-amqp是基础抽象,spring-rabbit是底层的默认实现。

1 Basic Queue 简单队列模型

SpringAMQP如何发送消息?

  • 引入amqp的starter依赖;
  • 在发送端服务中配置RabbitMQ地址;
  • 利用RabbitTemplate的convertAndSend方法

SpringAMQP如何接收消息?

  • 引入amqp的starter依赖;
  • 配置RabbitMQ地址;
  • 定义类,添加@Component注解;
  • 类中声明方法,添加@RabbitListener注解,方法参数就时消息
  • 注意:消息一旦消费就会从队列中删除,RabbitMQ没有消息回溯功能。

2 Work Queue 工作队列模型

 Work模型的使用:

  • 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理;
  • 通过设置prefetch来控制消费者预取的消息数量。

3 发布、订阅模型-Fanout

 注:exchange(交换机)负责消息路由,而不是存储,路由失败则消息丢失。

Fanout Exchange会将接收到的消息路由到每一个跟其绑定的queue。

交换机的作用:

  • 接收publisher发送的消息;
  • 将消息按照规则路由到与之绑定的队列;
  • 不能缓存消息,路由失败,消息丢失;
  • FanoutExchange的会将消息路由到每个绑定的队列。

声明队列、交换机、绑定关系的Bean是什么?

  • Queue
  • FanoutExchange
  • Binding

4 发布、订阅模型-Direct

 Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)

  • 每一个Queue都与Exchange设置一个BindingKey;
  • 发布者发送消息时,指定消息的RoutingKey;
  • Exchange将消息路由到BindingKey与消息RoutingKey一致的队列;

Direct 交换机 与 Fanout交换机的差异

  • Fanout交换机将消息路由给每一个与之绑定的队列;
  • Direct交换机根据RoutingKey判断路由给哪个队列;
  • 如果多个队列具有相同的RoutingKey,则与Fanout功能相似。

基于@RabbitListener注解声明队列和交换机有哪些常见注解?

  • @Queue
  • @Exchange

5 发布、订阅模型-Topic

 TopicExchange 与 DirectExchange类似,区别在于routingKey必须是多个单词的列表,并且以.分割。

Queue 与 Exchange指定BindingKey时可以使用通配符:

  • #:代表0个或多个单词;
  • *:代指一个单词

6 消息转换器

SpringAMQP中消息的序列化和反序列化是怎么实现的?

  • 利用MessageConverter实现的,默认是JDK的序列化;
  • 注意发送方与接收方必须使用相同的MessageConverter。

 原文链接:【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务-哔哩哔哩】 https://b23.tv/vv527Ac

posted @   DAYTOY-105  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示