【RockitMQ面试需要知道哪些内容】

RocketMQ 使用教程

一、基础概念与架构
  1. 核心角色

    • NameServer:无状态路由中心,负责 Broker 的注册与发现,与 ZooKeeper 不同,无强一致性要求。
    • Broker:消息存储与转发节点,支持主从架构(如 Dledger 模式)实现高可用。
    • Producer/Consumer:生产者发送消息,消费者拉取消息,均通过 NameServer 获取 Broker 路由信息。
  2. Topic 与 Queue

    • Topic 是逻辑概念,底层由多个 Queue(队列)组成,消息实际存储在 Queue 中,支持分布式存储与负载均衡。
二、快速入门
  1. 安装与启动

    • 下载 RocketMQ 并解压,启动 NameServer 和 Broker:
      nohup sh bin/mqnamesrv &
      nohup sh bin/mqbroker -n localhost:9876 &
      
  2. 生产者发送消息

    • 同步发送(可靠但延迟较高):
      DefaultMQProducer producer = new DefaultMQProducer("group");
      producer.setNamesrvAddr("localhost:9876");
      producer.start();
      Message msg = new Message("TopicTest", "Hello RocketMQ".getBytes());
      SendResult result = producer.send(msg);
      producer.shutdown();
      
    • 异步发送(高性能,需回调处理结果):
      producer.send(msg, new SendCallback() {
          @Override public void onSuccess(SendResult sendResult) { /* ... */ }
          @Override public void onException(Throwable e) { /* ... */ }
      });
      
  3. 消费者订阅消息

    • 集群模式:同 Group 内竞争消费,每条消息仅被一个 Consumer 处理。
    • 广播模式:同 Group 内所有 Consumer 均消费同一消息。
      DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group");
      consumer.subscribe("TopicTest", "*");
      consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
          // 处理消息
          return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
      });
      consumer.start();
      
三、进阶功能
  1. 事务消息

    • Half Message:生产者先发送预处理消息,Broker 存储到临时 Topic,待本地事务执行成功后提交。
    • 事务状态回查:若生产者未提交/回滚,Broker 定时回调检查事务状态,确保最终一致性。
  2. 顺序消息

    • 通过 MessageQueueSelector 将同一业务键的消息发送到同一 Queue,消费时单线程处理:
      producer.send(msg, (mqs, msg, arg) -> mqs.get(arg.hashCode() % mqs.size()), orderId);
      
  3. 消息持久化与高可用

    • 同步刷盘flushDiskType=SYNC_FLUSH)确保消息写入磁盘后再响应生产者。
    • Dledger 模式:基于 Raft 协议实现主从数据同步,避免单点故障。

RocketMQ 常见面试题

一、核心原理
  1. RocketMQ 的消费模式是 Push 还是 Pull?

    • 本质是 Pull(长轮询),Consumer 通过长连接主动拉取消息,Broker 若无消息则挂起请求,待新消息到达后立即返回。
  2. 如何保证消息不丢失?

    • Producer:同步发送 + 重试机制(setRetryTimesWhenSendFailed)。
    • Broker:同步刷盘 + Dledger 主从同步。
    • Consumer:手动 ACK,消费成功后再提交 Offset。
  3. 消息重复消费如何解决?

    • 原因:网络重试、消费模式(不同 Group 重复消费)。
    • 方案:业务层幂等(如数据库唯一键、Redis 分布式锁)。
二、设计与实践
  1. 如何实现顺序消费?

    • 生产者指定同一 Queue,消费者单线程处理(如订单场景)。
    • 示例:使用订单 ID 哈希选择 Queue。
  2. 消息堆积如何处理?

    • 临时扩容 Consumer,或创建新 Topic 迁移积压消息。
    • 注意:RocketMQ 消息默认 48 小时后清理(基于 CommitLog 访问时间)。
  3. 负载均衡机制

    • Producer:随机选择 Queue,支持自定义路由策略(如哈希)。
    • Consumer:平均分配、一致性哈希等算法,支持动态扩缩容。
三、高可用与扩展
  1. Broker 高可用方案

    • 主从复制(同步/异步) + Dledger 集群(基于 Raft)。
    • NameServer 无状态,多节点部署避免单点故障。
  2. 分布式事务支持

    • 事务消息通过 Half Message 和状态回查实现最终一致性,适用于订单、支付等场景。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值