支付宝消息数据库故障

RocketMQ 半事务消息核心流程

  1. 消息发送:生产者将消息发送至 Broker。
  2. 半事务消息标记:Broker 完成消息持久化后,向生产者返回 Ack 确认(表示消息发送成功),此时消息被标记为「暂不能投递」状态,即半事务消息
  3. 本地事务执行:生产者收到 Ack 后,执行本地业务事务逻辑。
  4. 二次确认与消息处理:生产者根据本地事务执行结果,向 Broker 提交二次确认(Commit 或 Rollback),Broker 按以下规则处理:
  5. 异常场景:消息回查机制

支付场景

image.png

image.png

flowchart TD
    A[本地事务]
    B[消息生产者]
    C[服务端]
    D[消费者]

    B -->|1.发送半事务消息| C
    C -->|2.半事务消息发送成功| B
    B -->|3.执行本地事务| A
    A -->|4. Commit or Rollback| B
    B -->|4. Commit or Rollback| C
    C -->|5. 未收到4的确认时,回查事务状态| B
    B -->|6. 检查本地事务的状态| A
    C -->|7. 根据事务的状态Commit/Rollback| B
    C -->|Commit 投递消息| D
    D -->|Rollback 不投递消息| C

    style A fill:#a9d18e,stroke:#333,stroke-width:2px
    style B fill:#fff2cc,stroke:#333,stroke-width:2px
    style C fill:#c9daf8,stroke:#333,stroke-width:2px
    style D fill:#d9d2e9,stroke:#333,stroke-width:2px

事务回查生命周期

image.png