消息队列

本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。

常见问题

MQ 的应用场景
  • 削峰填谷:应用于高并发场景,对异步消息处理,削减瞬时流量压力,在低流量时,对积压消息进行处理,提高资源利用率;
  • 系统解耦:基于发布/订阅模式,实现业务模块间的松耦合,提高系统扩展性与可维护性;
  • 异步处理:适用于不需要立即返回结果的任务,提升接口响应速度与用户体验;
  • 消息可靠性保障:通过持久化、确认机制、重试策略、防重复消费(幂等处理)等手段,确保消息不丢失、不乱序、不重复
MQ 解耦和微服务解耦的区别?
  • MQ 解耦主要针对消息层面,通过消息异步处理降低系统的直接依赖,适用于削峰填谷、事件驱动和异步处理场景;
  • 微服务解耦主要针对架构层面,强调业务服务的边界清晰、独立部署和独立扩展;
  • 微服务往往需要用过 MQ 进一步降低服务间的同步依赖。
对比维度MQ 解耦微服务解耦
解耦对象模块间的消息交互服务之间的业务逻辑和功能
粒度消息级别的解耦系统架构级别的解耦
实现方式借助 消息队列,通过异步消息传递将发送者和接收者解耦借助 服务注册发现、API 网关、RPC 或 REST 接口等机制拆分和独立部署服务
同步/异步异步交互 为主同步调用 为主,也支持异步调用
适用场景高并发削峰、事件驱动、异步处理大型系统的模块拆分、职责边界清晰化、独立扩展和维护
耦合度变化发送方只需关心消息格式,接收方变化对发送方无影响服务之间通过接口契约绑定,接口变化可能需要协同调整
典型问题消息可靠性、顺序性、重复消费、延迟处理服务治理、接口版本兼容性、网络延迟、分布式事务
优势异步高性能,系统更具弹性架构清晰,便于独立扩展、部署和测试
限制不适合同步强一致性需求如果没有 MQ 结合,某些场景下无法应对流量激增或异步需求
发生消息堆积怎么处理

从生产端、消费端、队列本身入手, 消费端增加消费者, 生产端做一个回调缓冲(如果太多减少消息生产), 队列进行消息压缩(我具体是说很多消息的 id 等属性重复在业务上可以接受压缩成一条)

  • MQ 的消息怎么保证不丢失

RocketMQ

  • RocketMQ 的延迟队列是怎么实现的?
材料计算常用资源