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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?