发布订阅的模型结构
发布侧是一棵树:发布者代表一个数据源,写组定义发送节奏与传输参数,数据集写者绑定一个数据集,数据集里是一个个按顺序排列的字段;接收侧结构对称,由订阅者、读组与数据集读取者组成。发布时按数据集结构把字段值编码成网络消息,接收方按同样顺序解码,所以两侧的字段顺序与类型必须严格一致,任何一边改结构都要同步修改。这种模型让配置可以放在地址空间里被浏览和读写,减少人工比对字段表的工作。
基本信息
| 发布侧对象 | 发布者、写组、数据集写者、数据集字段 |
|---|---|
| 接收侧对象 | 订阅者、读组、数据集读取者 |
| 传输映射 | UDP 单播或组播、以太网二层、消息中间件 |
| 编码方式 | 紧凑二进制(效率高)与 JSON(可读性好) |
| 消息头 | 发布者标识、写组标识、序号、时间戳、载荷 |
| 安全 | 安全组定义模式与密钥,密钥由密钥服务分发 |
典型使用场景
- 机组内高频共享数据:组播一份数据给多个接收方,避免重复读取
- 边缘到云:经消息中间件把数据集送到异地平台,跨越厂区边界
- 紧凑编码节省带宽:字段密集的测量数据在低速链路上传输
- 可读编码便于联调:JSON 编码让抓包与日志直接看懂字段
- 结构变更管理:读取地址空间里的配置对象,比对两侧字段顺序
- 安全组隔离:不同数据集使用不同密钥,限制接收范围
关键对象速查
| 对象 | 作用 | 配置要点 |
|---|---|---|
| 发布者 | 数据源与身份标识 | 发布者标识需全局唯一 |
| 写组 | 发送节奏与传输参数 | 周期、编码方式、传输映射 |
| 数据集写者 | 把一个数据集绑定到写组 | 标识在写组内唯一 |
| 数据集字段 | 单个被发布的值 | 顺序与类型必须与接收侧一致 |
| 读组与读取者 | 接收侧对称结构 | 按写者标识过滤,避免收错数据 |
| 安全组 | 保护模式与密钥 | 密钥轮换与分发方式需规划 |
消息字段示意
消息字段示意
# 网络消息结构(概念)
# 发布者标识 → 区分数据来源
# 写组标识 → 区分同一来源的不同数据流
# 序号 → 接收方据此发现丢包与乱序
# 时间戳 → 判断数据新鲜度,注意两侧时钟
# 载荷 → 按数据集字段顺序编码的数值
# 接收方:按数据集结构逐字段解码,字段顺序不一致时数值会整体错位接收方无法向发布方回告丢包,序号与看门狗计数是判断数据是否连续的主要手段,做数据质量标记时应当把序号缺口记录下来。
密钥分发没有规划好时,安全组形同虚设:静态密钥长期不换,一旦泄露需要停线统一更新所有节点。