一、MQ相关概念:

消息队列(Message Queue,MQ):是一种跨进程、异步通信的中间件,用来在分布式系统中传递消息。简单理解:生产者发消息 → MQ 暂存 → 消费者取消息,实现解耦、异步、削峰。

名词 含义
Producer 消息生产者(发送消息)
Consumer 消息消费者(接收消息)
Broker MQ 服务器节点
Queue 队列(存储消息)
Topic 主题(发布订阅模式)
Message 消息体
Ack 消息确认(保证不丢失)

二、MQ 的作用--为什么要用 MQ?

1. 系统解耦(最核心)

  • 不直接调用接口,通过消息通信
  • 下游系统故障不影响上游
  • 扩展性极强

2. 异步处理

  • 主线程不等待,直接返回
  • 提升响应速度、用户体验

3. 流量削峰(秒杀 / 高并发必备)

  • 瞬间流量先进入队列
  • 消费者按能力消费,防止压垮数据库 / 服务

4. 最终一致性

  • 分布式事务解决方案(可靠消息)

5. 错峰流控

  • 夜间 / 低峰处理耗时任务

三、两种消息模式

1. 点对点模式(Queue)

  • 一个消息只能被一个消费者消费
  • 典型:任务分发、订单处理

2. 发布 / 订阅模式(Topic)

  • 一个消息可以被多个消费者消费
  • 典型:日志广播、通知推送

四、Java 主流 MQ 对比

MQ 优点 缺点 适用场景
RabbitMQ 易用、稳定、功能全、延时队列 吞吐量一般 中小企业、金融、电商
RocketMQ 高吞吐、高可用、阿里出品 社区一般 高并发、电商、秒杀
Kafka 超高吞吐、大数据生态 功能少 日志、流处理、大数据
ActiveMQ 老牌、轻量 性能差,不推荐生产 老旧项目
  • 一般业务:RabbitMQ / RocketMQ
  • 大数据 / 日志:Kafka

五、常见问题:

1. 消息重复消费(如何解决?)

原因:网络波动、重试机制导致消息重复投递

解决方案:消费端幂等性(执行多次结果一致)

  • 唯一 ID + Redis 判断;数据库唯一键;状态机判断

2. 消息丢失(如何保证不丢?)

从三个环节保证:

  1. 生产者 → MQ:使用事务消息 / 确认机制(Confirm)
  2. MQ 自身:开启持久化
  3. MQ → 消费者:手动 Ack,消费完再确认

3. 消息堆积(如何解决?)

原因:消费者速度 < 生产者速度解决方案

方案: 增加消费者数量;优化消费逻辑;批量消费;清理无效消息

总结:

        以上是Java分布式项目中常涉及到的消息队列相关概念,下一篇将结合Springboot 的项目应用来详细记录MQ的使用和注意事项。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐