1. RabbitMQ
1.1 RabbitMQ概述
MQ,消息队列,一种在分布式系统中用于通信的关键组件
本质上是一个队列,遵循 FIFO(先入先出)原则,队列中存储的内容是消息(message)
消息可以非常简单,比如只包含文本字符串或 JSON 数据,也可以很复杂,如内嵌对象。MQ 主要用于分布式系统之间的通信,解决数据传递的效率和可靠性问题
1.2 系统间通信方式
在分布式系统中,系统之间的调用通常有两种方式:
1.同步通信:
直接调用对方的服务,数据从一端发出后立即到达另一端。这种方式响应快,但可能导致调用方阻塞,尤其在处理耗时操作时效率低下
2.异步通信:
数据从一端发出后,先进入一个容器进行临时存储,当满足特定条件(如接收方准备好)时,再由容器转发给另一端
RabbitMQ 就是这个容器的具体实现,它解耦了发送方和接收方,提高了系统的灵活性和可扩展性
1.3 MQ的作用
MQ的核心工作是接收、存储和转发消息
1.3.1.异步解耦:
一些耗时操作(如发送注册短信或邮件通知)不需要即时返回结果。MQ 可以将这些操作异步化。例如,用户注册后,系统立即返回注册成功消息,同时将通知任务放入 MQ;MQ 在后台异步处理通知,避免了用户等待
这降低了系统耦合度,提升响应速度。
1.3.2.流量削峰:
面对突发流量(如秒杀或促销活动),系统可能因过载而崩溃,MQ 能缓冲请求,将峰值流量排队处理
例如,在高并发场景下,请求先进入 MQ 队列,系统根据自身处理能力逐步消费消息,防止资源耗尽
这避免了为处理峰值而过度投资资源,优化了成本效率。
1.3.3.消息分发:
当多个系统需要对同一数据做出响应时,MQ 可实现高效的消息分发
例如,支付成功后,支付系统向 MQ 发送一条消息;其他系统(如订单系统、库存系统)订阅该消息,无需轮询数据库
这减少了冗余查询,提高了数据一致性和系统性能。
1.3.4.延迟通知:
MQ 支持延迟消息功能,适用于在特定时间后触发操作的场景
例如,在电子商务平台中,用户下单后未支付,系统将超时取消订单的任务放入 MQ 延迟队列;MQ 在指定时间(如下单后 30 分钟)自动发送消息,触发取消流程
这简化了定时任务管理,提升了用户体验
1.4.RabbitMQ
RabbitMQ 是 MQ 的一种流行实现,它基于 AMQP(高级消息队列协议),提供了可靠的消息传递、队列管理和路由功能。并能处理高吞吐量和复杂消息的路由需求
2.RabbitMQ 工作模式
RabbitMQ支持多种工作模式来处理消息的生产和消费。这些模式适用于不同场景,帮助实现高效、可靠的消息传递
2.1 Simple (简单模式)
最基本的点对点模式。生产者(P)将消息发送到队列(Queue),消费者(C)从队列中取出消息。队列充当缓存区,确保消息在传递过程中不会丢失

一个生产者对应一个消费者,每条消息只能被消费一次,简单易用
适用场景:消息需要被单个消费者处理的场景
2.2 Work Queue (工作队列模式)
扩展了简单模式,消息被分发到不同的消费者,实现负载均衡

每个消费者接收不同的消息,同时支持并行处理,提高系统吞吐量
适用场景:集群环境中的异步任务处理
2.3 Publish/Subscribe (发布/订阅模式)
引入交换机,生产者发送消息到交换机,交换机将消息复制并广播到所有绑定的队列,每个队列对应一个消费者。

适用场景:消息需要被多个消费者同时接收的场景
2.4 Routing(路由模式)
发布/订阅模式的变种,增加路由键。生产者发送消息时指定RoutingKey,交换机根据BindingKey规则将消息筛选后路由到特定队列

适用场景:需要根据特定规则分发消息的场景
2.5 Topics(通配符模式)
路由模式的升级版,支持通配符匹配RoutingKey。RoutingKey使用点分隔符(如"order.*"),交换机根据模式规则路由消息

适用场景:需要灵活匹配和过滤消息的场景
2.6 RPC(RPC通信模式)
实现远程过程调用(RPC),生产者发送请求消息,消费者处理并返回响应。通过两个队列(请求队列和响应队列)模拟回调机制

适用场景:分布式系统中的远程调用
2.7 Publisher Confirms(发布确认模式)
确保消息可靠发送到RabbitMQ服务器的机制。生产者将通道设置为confirm模式后,每条消息获得唯一ID,服务器异步发送确认(ACK)表示消息已接收
适用场景:对数据安全性要求高的场景
希望这份博客能够帮助到你。如果有其他需要修改或添加的地方,请随时告诉我。


被折叠的 条评论
为什么被折叠?



