平台级联数据模型(`core/repositories/models/cascade`)

4 阅读3分钟

平台级联数据模型(core/repositories/models/cascade

本文说明 GB28181 平台级联(GBC:下级平台向上级注册/保活/目录关系) 配置实体 core/repositories/models/cascade 的职责、字段含义,及与 VSS 运行时结构的关系。

项目地址 github.com/openskeye/g…


1. 在项目中承担的作用

该模型描述 一条「上级联平台」连接配置:数据落在表 sk-cascade。字段覆盖 对端 SIP 国标编码、域、IP/端口、认证、本地出口 IP、注册/心跳周期、relations 中允许参与级联的目录或通道节点 等。VSS 进程内 types.ServiceContext 持有 CascadeRecords []*cascade.Item,在 录像目录应答、报警 等逻辑中按 relations 与通道的 CascadeChannelUniqueId 匹配,决定是否向 上行 GBC 发送或转发(实现细节见 gbs_sip/video_records.goalarm.go)。GBCKeepaliveChanCascadeRegister* 等 map 与通道配合维护 GBC 注册与保活状态。

层级作用
数据层core/app/sev/db/internal/svc/init_database.gocascade.Cascade 执行 AutoMigrateServiceContext 注入 CascadeModelcore/app/sev/db/internal/svc/service_context.go)。
运行时VSS core/app/sev/vss/internal/types.ServiceContext 使用 cascade.Item(含运行时 XSipRegisterState / XSipAuth非持久化 字段)及 CascadeRecords 列表。
信令GBC 注册、保活、Invite/转发等逻辑与 ItemMakeGBCRegisterExecutingKeyDelayRegisterTimeout 等辅助方法配合。

UseCache() 返回 nil,本表 不启用 ORM 模型级内存缓存。


2. 表与字段:数据库列 ↔ Go ↔ JSON

实体 Cascade 映射表 sk-cascade

字段含义说明
id主键自增。
name名称展示名(通道名称/级联配置名称,以代码为准)。
uniqueId业务 UIDCHAR(70),唯一索引 Cascade_UniqueId
protocol信令传输协议1 UDP、2 TCP(见 ProtocolMaps;与常量 Protocol_UDP/Protocol_TCP 对应,注意常量名与数值约定)。
sipId对端 SIP 国标编码文本。
sipDomain对端 SIP 域文本。
sipIp / sipPort对端 SIP 地址端口
usernameSIP 认证用户唯一索引,注意安全存储
passwordSIP 认证密码注意安全存储
localIp本机级联出口 IP与对端可达性相关。
keepaliveInterval心跳间隔秒。
registerInterval注册间隔秒。
registerTimeout注册有效期秒;Item.DelayRegisterTimeout()会在过短时下限 30s 并略提前续约。
commandTransport命令传输方式信令 TCP/UDP,数值含义同 protocol 一类约定。
state是否启用0 未启用,1 启用。
online是否在线0 不在线,1 在线(由信令/任务刷新,具体见 VSS GBC 逻辑)。
relations分组/通道集合库内 JSON 数组字符串;元素为 RelationItemparental + uniqueId),可与通道级联编号或目录节点 id 对齐。
catalogGroupSize目录分组大小默认 4,用于 Catalog 分包等行为(与国标目录同步相关)。
createdAt / updatedAt创建 / 更新时间毫秒时间戳;Correction / CorrectionMap 维护。

3. ItemCascade 的字段对应

  • 内嵌 *Cascade:标量与 Cascadejson 一致。
  • Relations:API 为 []RelationItem;落库为 relations 字符串。
  • UseDBCacheXSipRegisterStateXSipAuthgorm:"column:-"不落库;供 GBC 连接过程使用。

4. 列名常量(variables.go

常量数据库列
ColumnIdid
ColumnUniqueIduniqueId
ColumnNamename
ColumnProtocolprotocol
ColumnSipIdsipId
ColumnSipDomainsipDomain
ColumnSipIpsipIp
ColumnSipPortsipPort
ColumnUsernameusername
ColumnPasswordpassword
ColumnLocalIplocalIp
ColumnKeepaliveIntervalkeepaliveInterval
ColumnRegisterIntervalregisterInterval
ColumnRegisterTimeoutregisterTimeout
ColumnCommandTransportcommandTransport
ColumnStatestate
ColumnOnlineonline
ColumnCatalogGroupSizecatalogGroupSize
ColumnRelationsrelations
ColumnCreatedAtcreatedAt
ColumnUpdatedAtupdatedAt

PrimaryId"id"


5. 行为与联调注意点

  • CascadeModel 与 VSS:DB 服务已注册 CascadeModel;VSS 侧主要通过 RPC + 内存中的 CascadeRecords 消费配置,二者由数据同步/拉取逻辑衔接(以实际 FetchData 或配置下发为准)。
  • relations 匹配:转发时常 跳过 parental==true 的目录项,只对 叶子 uniqueId 与通道 CascadeChannelUniqueId 相等性做匹配(见 video_records.goalarm.go)。

6. 相关代码路径

  • 模型包:core/repositories/models/cascade/
  • DB:core/app/sev/db/internal/svc/init_database.goservice_context.goCascadeModel
  • VSS 类型与通道:core/app/sev/vss/internal/types/types.gointernal/svc/service_context.go
  • 级联匹配与转发:core/app/sev/vss/internal/logic/gbs_sip/alarm.govideo_records.go
  • SSE 中的级联数量展示:core/app/sev/vss/internal/logic/sse/sev_state.go