# PartionQoS
# 功能介绍
此 QoS 可以对发布者以及订阅者进行分区。即使发布者创建的写者和订阅者创建的读者都绑定同一个主题,QoS 相互兼容等满足其他一切通讯的条件,若他们的发布者和订阅者的 PartionQoS 的 name 属性不同,写着与读者也无法进行通信,只有他们的 PartionQoS 的 name 相同才能通信。
# 兼容性
无
# 使用方法
PartionQoS 成员列表如下表。
类型 | 字段名 | 描述 |
---|---|---|
StringSeq | name | 默认情况下为空。最多可以有 64 个名称,所有名称加起来最多 256 个字符。该变量为分区名。 |
# DataWrietr 端
1) QoS 赋值
该 QoS 的设置针对于发布者和订阅者。设置好的 QoS 会被被作为参数用于创建发布者以及订阅者。
下图为发布者的 PartionQoS 的设置方式。首先创建 DDS_PublisherQoS 类型的变量 pQoS,该变量用于保存发布者的 QoS 的值。在对发布者进行分区的时候,会将一个字符串赋予 pQoS.partition.name。图中的 partitionname1 以及 partitionname2 是两个字符串。并分别在 publisher 以及 publisher1 创建之前赋予 pQoS,然后创建发布者的时候将 pQoS 作为参数传入。这样 publisher 的所在区域为 partitionname1,publisher1 所在区域为 partitionname2。
# DataReader 端
1) QoS 赋值
下图为订阅者的 PartionQoS 的设置方式。首先创建 DDS_SubscriberQoS 类型的变量 sQoS,该变量用于保存订阅者的 QoS 的值。在对订阅者进行分区的时候,会将一个字符串赋予 sQoS.partition.name。图中的 partitionname1 以及 partitionname2 是两个字符串。并分别在 subscriber 以及 subscriber1 创建之前赋予 sQoS,然后创建订阅者的时候将 sQoS 作为参数传入。这样 subscriber 的所在区域为 partitionname1,subscriber1 所在区域为 partitionname2。
# 效果展示
1) 适用场景
当有多个写者和多个读者同时对同一个主题进行读写。且读者只想获取特定的写者的数据,或者写者只想对特定的读者发送数据。那么就可以对创建这些写者或读者的发布者或订阅者进行分区,即使所有读者或写者绑定同一个主题,也只会接受同一分区的数据而不被其他分区的数据影响。
2) 使用例子
假设现在有两个发布者和两个订阅者,分别为发布者:publisher1、publisher2 以及订阅者:subscriber1、subscriber2。
publisher2 发出的数据值是 publisher1 发出的数据值+10000。
发布者 publisher1 与订阅者 subscirber1 绑定的是同一主题,publisher2 与 subscriber2 绑定的是同一主题。在分区的时候可能会出现以下情况:
①.publisher1 与 subscirber1 为同一主题的同一分区,publisher2 与 subscriber2 也为同一主题的同一分区。
下图为结果,可以看出,subscirber1 与 subscriber2 都能接收到数据。
②.publisher1 与 subscirber1 为同一主题的不同分区,publisher2 与 subscriber2 为同一主题的同一分区
下图为结果,可以看出,subscirber1 不能接受数据而 subscriber2 能接收到数据。
③.publisher1 与 subscirber1 为同一主题的不同分区,publisher2 与 subscriber2 也为同一主题的不同分区
下图为结果,可以看出,subscirber1 与 subscriber2 都不能接受数据。