RabbitMQ实战---读书笔记

Executive Summary

核心观点(金字塔原理)

结论先行: RabbitMQ是一个功能强大的消息队列中间件,通过交换器、队列和绑定机制实现灵活的消息路由,支持持久化和事务确认保障消息可靠性。

支撑论点:

  1. 消息通信模型:通过信道、交换器(direct/fanout/topic)和队列实现灵活的消息路由机制
  2. 持久化机制:需同时配置持久化交换器、队列和消息投递模式才能实现消息的崩溃恢复
  3. 可靠性保障:采用消息确认机制和confirm模式,提供轻量级事务控制

SWOT 分析

维度 分析
S 优势 支持多种交换器类型(direct/fanout/topic);消息确认机制保障可靠性;confirm模式轻量级高性能
W 劣势 默认配置不持久化,重启会丢失数据;持久化配置复杂需多步骤;持久化过程中宕机仍有风险
O 机会 适用于异步解耦、削峰填谷、分布式系统消息通信场景
T 威胁 持久化时的宕机风险;消息积压导致的性能问题;需要额外的运维监控成本

适用场景

  • 分布式系统间的异步消息通信
  • 需要可靠消息投递的业务场景
  • 一对多消息广播(fanout)或基于规则路由(topic)的场景

第1章 天将奇兵

  • RabbitMQ 基于 AMQP(Advanced Message Queuing Protocol)协议,使用 Erlang 语言编写,天然支持高并发和分布式
  • 消息队列的核心价值:异步处理(提升响应速度)、应用解耦(降低系统间依赖)、流量削峰(保护后端服务)
  • RabbitMQ 与其他消息中间件对比:相比 Kafka 更注重消息可靠性和灵活路由;相比 ActiveMQ 性能更好、社区更活跃
  • 适用场景:订单处理、邮件/短信通知、日志收集、微服务间通信

第2章 理解消息通信

  • 信道跟TCP连接。
  • 交换器,队列,绑定。根据绑定规则将队列绑定到交换器上,消息是发布到交换器上的。有三种交换器:direct,fanout,topic。
  • 基于消息的路由键和交换器类型,服务器会决定将消息投递到那个队列上。
  • rabbitMQ每一条消息都要返回确认消息,否则不会继续发送消息给该订阅者。
  • 默认情况下重启RabbitMQ服务器,队列和交换器都消失了以及里面的消息。durable属性默认false。它决定了RabbitMQ是否需要在崩溃或者重启之后重新创建队列。
  • 想要消息从RabbitMQ崩溃中恢复必须做到
    1. 把它的投递模式Delivery Mode 选项设置为2(持久)
    2. 发送到持久化的交换器
    3. 到达持久化的队列。 疑问:如果在持久化队列做持久化时候,宕机或者重启了,怎么办?
  • 保证持久性消息能重启恢复的方式就是写入磁盘的持久化日志文件。一旦某条持久化消息被消费了,被标记为等待垃圾收集。
  • 虚拟主机和隔离措施。
  • 将信道设置成confirm模式控制事务。异步执行。消息没有回滚概念,失败重发。发送确认方式更加轻量级。同时对代理服务器的性能影响几乎忽略不计。
  • 使用RabbitMQ核心流程
    1. 连接到RabbitMQ
    2. 获取信道
    3. 声明交换器
    4. 创建消息
    5. 发布消息
    6. 关闭信道
    7. 关闭连接