首页 / Java 平台(cloud-java) / subscription 订阅
subscription 订阅
套餐、权益、active 订阅、Seat 占用与绑定 Saga、权益鉴权 gRPC。
职责概览
订阅模块 独立端口 48103 / gRPC 49103,管理订阅产品与能力、套餐权益、active 订阅、Seat 席位占用、订阅转移与绑定 Saga,并提供权益鉴权 gRPC 服务。
接口清单
| 面 | Controller | 说明 |
|---|---|---|
| Admin | SubscriptionProductController、SubscriptionProductCapabilityController、SubscriptionCapabilityController、SubscriptionActiveController、SubscriptionSeatController、SubscriptionRecordController | 产品/能力/active/seat/记录管理 |
| App | AppSubscriptionController、AppSubscriptionTransferController、AppCapabilityDemoController | 用户订阅、转移与能力演示 |
关键实现
权益鉴权 gRPC
service SubscriptionEntitlementService {
rpc HasDeviceCapability(HasDeviceCapabilityRequest) returns (HasDeviceCapabilityResponse);
rpc BatchHasDeviceCapability(BatchHasDeviceCapabilityRequest) returns (BatchHasDeviceCapabilityResponse);
rpc ListDeviceCapabilities(ListDeviceCapabilitiesRequest) returns (ListDeviceCapabilitiesResponse);
rpc GetRequiredProducts(GetRequiredProductsRequest) returns (GetRequiredProductsResponse);
}
- 按
device_name(subject_id)校验能力码,如DATA_REPORT、FAMILY_SHARING。 - 供 Go IoT 网关等外部系统调用,判断设备是否拥有指定能力。
绑定 Saga
RocketMQ topic entrax-subscription-binding-saga-v1,Tag 即事件类型(统一常量 SubscriptionBindingSagaConstants):
| 事件 | 语义 |
|---|---|
subscription.seat.reserve.requested | Seat 预占请求(IoT 发起) |
subscription.seat.reserved / .reserve-failed / .payment-required | 预占结果 |
subscription.paid.activation.requested / .completed | 支付后激活 |
subscription.seat.release.requested / .released | 补偿释放 |
iot.binding.completed / .failed | 绑定最终结果 |
定时任务
SubscriptionExpireJob:订阅过期处理SubscriptionBindingOutboxJob:绑定 Outbox 可靠发布
数据与维护注意
核心表:subscription_*(8 张):产品、产品能力、active、record、seat、transfer 等。
subscription_active、subscription_record、subscription_seat分别表达当前权益、变更记录与席位占用,不能只读一张表判断完整订阅状态。subscription_seat对租户内已占用 session/device guard 唯一;是否占用需同时判断状态字段。- 订阅主体/来源字段存在设备、会员等语义,查询时必须同时查看枚举与 Mapper 条件。