加载中

MQ

文章分类

浏览该分类下的所有文章

3 篇文章 1

消息队列基本原理和选型对比

消息队列解决解耦、异步、削峰填谷,常用点对点和发布/订阅模式。选型关注顺序、伸缩、留存、容错、可靠性、时序、吞吐、路由等。Kafka 吞吐高、持久可靠但全局有序和延时受限;RabbitMQ 路由灵活、支持定时消息,性能一般且学习成本高;Pulsar 计算存储分离,支持无缝扩容、跨地域复制和延时消息,架构较复杂;RocketMQ 提供顺序队列、P2P 与 Pub/Sub,可靠性高、协议丰富,社区活跃度一般。依据业务流量、可靠性和扩展需求选择合适实现。

聊聊幂等设计

幂等指一次和多次相同请求产生同等效果,关键在于请求的唯一标识。业务场景如转账、MQ 消费、表单重复提交等常因超时或重复而需幂等保障。实现思路是为每次请求生成全局唯一 ID(UUID、Snowflake 等),在处理前先检查记录,已存在则直接返回上次结果。常用的 8 种方案包括:① 先查询再插入并捕获唯一键冲突;② 直接插入利用冲突判断;③ 基于状态机的条件更新;④ 使用独立防重表;⑤ Token 令牌(Redis 保存并一次性删除);⑥ 悲观锁(SELECT … FOR UPDATE);⑦ 乐观锁(版本号校验);⑧ 分布式锁(Redis/ZooKeeper)。此外,HTTP 方法中 GET、HEAD、OPTIONS、DELETE、PUT 为幂等,POST 不具幂等性。通过上述设计,可在超时重试或并发环境下确保业务安全、避免重复操作。

面试现场【MQ篇】

本文梳理了十个常见的消息队列面试题及要点:阐述了 MQ 的概念和 RabbitMQ、RocketMQ、Kafka 等主流中间件;列举了应用解耦、流量削峰、异步处理、消息通信、远程调用等典型场景;重点说明了生产者、存储端和消费者三阶段如何防止消息丢失、实现同步刷盘和复制、确保消费成功;介绍了保证顺序消费的分区/单线程策略及局部有序实现方式;讨论了重复消费的可能性及基于唯一标识或 Redis 的幂等方案;提供了排查与扩容、分批消费等应对消息积压的思路;对 Kafka、RocketMQ、RabbitMQ 在吞吐、语言、持久化、顺序、集群等方面进行对比选型;解析了基于副本选举的高可用机制;说明了事务消息的两段提交流程以保证数据一致性;最后给出设计自研 MQ 时应考虑的整体流程、RPC、持久化、消费模型、高可用、事务与伸缩等关键要素。