首页 / 业务功能与流程 / 设备绑定与权益分配流程
设备绑定与权益分配流程
绑定会话、绑定任务、订阅 Seat 预占与支付激活的 Saga 完整时序。
本页目录
流程总览
设备绑定 + 权益分配是跨 iot / member / subscription / pay 四个模块的 Saga 长事务,通过 RocketMQ 事件(topic entrax-subscription-binding-saga-v1)串联,任一步失败走 Seat 释放补偿。
| 模块 | 职责 | 关键记录 |
|---|---|---|
| iot | 绑定会话/任务、预绑定、最终归属 | iot_bind_session、iot_binding_task |
| member | 用户身份与家庭校验 | member_user |
| subscription | Seat 预占/释放、支付后激活 | subscription_seat、subscription_active |
| pay | 支付(如需) | pay_order、pay_payment_attempt |
绑定时序(Saga)
- 发起:App 调用
/iot/device/binding;iot 创建绑定会话 + 绑定任务(task_no唯一) - 预占请求:iot 发布
subscription.seat.reserve.requested(RocketMQ,含 tenantId 信封) - 预占执行:Subscription 消费者(group
subscription-binding-saga-subscription-v1)调handleReserveRequested预占 Seat - 结果回执:Subscription 发布
seat.reserved(成功)、seat.payment-required(需支付)或seat.reserve-failed;iot 消费者(groupsubscription-binding-saga-iot-v1)接收并驱动任务状态 - 支付:需要支付时走 pay Checkout 流程完成支付;成功后发布
subscription.paid.activation.requested - 激活:Subscription 执行
handlePaidActivationRequested激活订阅并占用 Seat,回发paid.activation-completed - 完成:iot 完成绑定,回发
iot.binding.completed;Subscription 记录审计结果(handleBindingAuditResult) - 补偿:任一步失败发布
subscription.seat.release.requested→subscription.seat.released释放 Seat
任务状态机
CREATED → SEAT_RESERVING → SEAT_RESERVED / PAYMENT_REQUIRED / RESERVE_FAILED
→ PAID_ACTIVATING → ACTIVATION_COMPLETED → BINDING → COMPLETED
→ FAILED(任意失败 → RELEASING → RELEASED)
状态推进由事件驱动,配合 IotBindingRetryJob 重试与 IotBindingOutboxJob 可靠发布。
消息契约
| 事件 Tag | 生产者 | 消费者 |
|---|---|---|
subscription.seat.reserve.requested | iot | subscription |
subscription.seat.reserved / reserve-failed / payment-required | subscription | iot |
subscription.paid.activation.requested / completed | pay / subscription | subscription / iot |
subscription.seat.release.requested / released | iot / subscription | subscription |
iot.binding.completed / failed | iot | subscription(审计) |
消息信封字段:tenantId(必需)、eventType、业务 ID 等;消费者先校验信封再分派。
幂等与补偿
- 幂等约束:
iot_binding_task对租户内task_no、pay_order_no及未完成 session/pre-bind/device guard 唯一。 - Seat 唯一:
subscription_seat对已占用 session/device guard 唯一,释放后恢复。 - 补偿:Seat 释放事件幂等(已释放不重复释放);支付失败不激活订阅。
- Outbox:本地事务 + Outbox 表,Job 异步发布,保证业务成功必发消息。