目录
- RabbitMQ是什么
- RabbitMQ使用场景
- RabbitMQ特点
- 使用RabbitMQ的好处
- RabbitMq的五种模式
- RabbitMQ如何保证消息可靠性
- RabbitMQ的死信交换机
- RabbitMQ延迟队列
- RabbitMQ惰性队列
- MQ集群
1 RabbitMQ是什么
RabbitMQ是由Erlang语言开发的AMQP开源实现, 是一种消息中间件, 用作服务之间的异步通讯, Erlang语言天生支持高并发和分布式, RabbitMQ微秒级消息延迟, 可用性高, 单机吞吐量一般. 使用RabbitMQ可以做到服务解耦, 性能提升, 故障隔离, 流量消峰.
2 为什么使用RabbitMQ
服务之间使用RabbitMQ异步通讯, 可以实现服务解耦, 故障隔离, 性能提升, 流量消峰.
服务解耦:
故障隔离:
性能提升:
流量消峰
3 RabbitMQ使用场景
服务之间远程调用有以下问题,
1 同步通讯比较耗时
2 业务之间远程调用, 业务B失败会波及业务A失败, 会抛异常
2 耦合程度高, 如果要在原有项目添加功能, 会有业务A调用业务D的问题, 需要侵入代码修改
RabbitMQ如何解决
1 RabbitMQ实现服务之间间接通讯, 业务A如需远程调用B,C,D, 无需等待响应, 只需要向RabbitMQ发送消息即可返回;
2 远程调用中, 如果业务B,C,D中有故障, 只需要等故障恢复, 再从MQ中拿消息即可, 不会波及A
3 如果添加功能, 只需要向MQ拿消息即可, 实现解耦合
4 RabbitMQ特点
优势: 服务解耦, 性能提升, 故障隔离, 流量消峰
劣势:
1 异步通讯远程调用时, 调用方拿不动对方返回值; 而Feign的同步通讯可以拿到
2 架构复杂;
3 依赖于MQ
5 使用RabbitMQ的好处
也是使用RabbitMQ的原因, 可以提升性能, 故障隔离, 服务解耦, 流量消峰
6 RabbitMq的五种模式
1 简单工作模式
2 工作队列
3 订阅模式
4 路由模式
5 通配符模式
其他配置: 添加消息转换器, 将序列化转化为JSON串
7 RabbitMQ如何保证消息可靠性 -
面临的问题
1 如何确保消息发送到消息队列
2 MQ宕机如何保证消息队列的消息不丢失
3 如何保证消息被消费者正常消费
解决方案
1 问题1的解决方案 - 生产者消息确认
publisher-confirm机制
publisher-return机制
2 问题2的解决方案 - 消息持久化
交换机持久化
消息队列持久化
消息持久化
3 问题3的解决方案
消费者消息确认机制
auto模式
消费失败重试机制
本地重试 - 重试耗尽策略
4 死信交换机
8 RabbitMQ如何实现消息延迟投递 - 延迟队列
-
延迟发送短信
-
用户下单,如果用户在15 分钟内未支付,则自动取消
-
预约工作会议,20分钟后自动通知所有参会人员
DelayExchange插件
9 RabbitMQ如何解决百万消息堆积, 无法及时消费的问题
Lazy Queues - 惰性队列
生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题
解决消息堆积有两种思路:
-
增加更多消费者,提高消费速度。也就是我们之前说的work queue模式
-
扩大队列容积,提高堆积上限
惰性队列特点:
1.消息存储磁盘
2.当消费者消息时候,RabbitMQ将消息从磁盘读取到内存。
3.适合海量消息存储
10 RabbitMQ如何做到高可用 MQ集群
普通集群
镜像集群 - 仲裁队列
本文链接:https://my.lmcjl.com/post/13292.html
4 评论