RabbitMq异步通讯 - 入门到起飞

目录

  1. RabbitMQ是什么
  2. RabbitMQ使用场景
  3. RabbitMQ特点
  4. 使用RabbitMQ的好处
  5. RabbitMq的五种模式
  6. RabbitMQ如何保证消息可靠性
  7. RabbitMQ的死信交换机
  8. RabbitMQ延迟队列
  9. RabbitMQ惰性队列
  10. 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 评论

留下您的评论.