RabbitMQ实战---读书笔记
Executive Summary
核心观点(金字塔原理)
结论先行: RabbitMQ是一个功能强大的消息队列中间件,通过交换器、队列和绑定机制实现灵活的消息路由,支持持久化和事务确认保障消息可靠性。
支撑论点:
- 消息通信模型:通过信道、交换器(direct/fanout/topic)和队列实现灵活的消息路由机制
- 持久化机制:需同时配置持久化交换器、队列和消息投递模式才能实现消息的崩溃恢复
- 可靠性保障:采用消息确认机制和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崩溃中恢复必须做到
- 把它的投递模式Delivery Mode 选项设置为2(持久)
- 发送到持久化的交换器
- 到达持久化的队列。 疑问:如果在持久化队列做持久化时候,宕机或者重启了,怎么办?
- 保证持久性消息能重启恢复的方式就是写入磁盘的持久化日志文件。一旦某条持久化消息被消费了,被标记为等待垃圾收集。
- 虚拟主机和隔离措施。
- 将信道设置成confirm模式控制事务。异步执行。消息没有回滚概念,失败重发。发送确认方式更加轻量级。同时对代理服务器的性能影响几乎忽略不计。
- 使用RabbitMQ核心流程
- 连接到RabbitMQ
- 获取信道
- 声明交换器
- 创建消息
- 发布消息
- 关闭信道
- 关闭连接