RocketMQ 架构

RocketMQ 核心组件

🎯 面试重点

📖 架构组件

核心组件

/**
 * RocketMQ 架构
 */
public class RocketMQArchitecture {
    // NameServer
    /*
     * - 轻量级注册中心
     * - 负责 Broker 管理、服务发现
     * - 每个 NameServer 独立
     */
    
    // Broker
    /*
     * - 消息存储和转发
     * - 主从部署
     */
    
    // Producer
    /*
     * - 消息生产者
     */
    
    // Consumer
    /*
     * - 消息消费者
     * - 推/拉模式
     */
}

📖 面试真题

Q1: RocketMQ 的事务消息原理?

答: RocketMQ 的事务消息是一种保证分布式事务最终一致性的机制,其核心原理如下:

1. 事务消息流程

RocketMQ 事务消息采用“两阶段提交”的思想,具体流程如下:

第一阶段:发送半消息

  1. 生产者发送“半消息”(Half Message)到 Broker。
  2. Broker 将消息存储到特殊的 Topic(RMQ_SYS_TRANS_HALF_TOPIC)中,此时消费者不可见。
  3. Broker 返回发送结果给生产者。

第二阶段:执行本地事务

  1. 生产者执行本地事务(如更新数据库)。
  2. 根据本地事务执行结果,生产者向 Broker 发送“提交”或“回滚”指令。

第三阶段:Broker 处理

2. 事务回查机制

3. 代码示例

// 1. 创建事务消息生产者
TransactionMQProducer producer = new TransactionMQProducer("group");
producer.setNamesrvAddr("localhost:9876");

// 2. 设置事务监听器
producer.setTransactionListener(new TransactionListener() {
    @Override
    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
        // 执行本地事务
        try {
            // 更新数据库等操作
            boolean success = doBusiness();
            return success ? LocalTransactionState.COMMIT_MESSAGE : 
                           LocalTransactionState.ROLLBACK_MESSAGE;
        } catch (Exception e) {
            return LocalTransactionState.ROLLBACK_MESSAGE;
        }
    }
    
    @Override
    public LocalTransactionState checkLocalTransaction(MessageExt msg) {
        // 事务回查逻辑
        return checkBusinessStatus() ? LocalTransactionState.COMMIT_MESSAGE : 
                                     LocalTransactionState.ROLLBACK_MESSAGE;
    }
});

// 3. 发送事务消息
Message msg = new Message("Topic", "Tag", "Key", "Body".getBytes());
TransactionSendResult result = producer.sendMessageInTransaction(msg, null);

4. 使用场景

5. 注意事项

6. 与其他方案对比

| 特性 | RocketMQ 事务消息 | TCC | 本地消息表 | |——|——————|—–|———–| | 一致性 | 最终一致 | 最终一致 | 最终一致 | | 侵入性 | 低 | 高 | 中 | | 性能 | 较高 | 中 | 中 | | 实现复杂度 | 低 | 高 | 中 | | 适用场景 | 异步消息场景 | 强一致性要求 | 简单分布式事务 |

总结:RocketMQ 事务消息通过半消息、两阶段提交和事务回查机制,实现了分布式事务的最终一致性,是解决分布式事务问题的常用方案之一。


⭐ 重点:理解 RocketMQ 架构