# PartionQoS

# 功能介绍

此 QoS 可以对发布者以及订阅者进行分区。即使发布者创建的写者和订阅者创建的读者都绑定同一个主题,QoS 相互兼容等满足其他一切通讯的条件,若他们的发布者和订阅者的 PartionQoS 的 name 属性不同,写着与读者也无法进行通信,只有他们的 PartionQoS 的 name 相同才能通信。

# 兼容性

# 使用方法

PartionQoS 成员列表如下表。

表 1 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。

图 1 发布者的 PartionQoS 的赋值

# DataReader 端

1) QoS 赋值

下图为订阅者的 PartionQoS 的设置方式。首先创建 DDS_SubscriberQoS 类型的变量 sQoS,该变量用于保存订阅者的 QoS 的值。在对订阅者进行分区的时候,会将一个字符串赋予 sQoS.partition.name。图中的 partitionname1 以及 partitionname2 是两个字符串。并分别在 subscriber 以及 subscriber1 创建之前赋予 sQoS,然后创建订阅者的时候将 sQoS 作为参数传入。这样 subscriber 的所在区域为 partitionname1,subscriber1 所在区域为 partitionname2。

图 2 订阅者的 PartionQoS 的赋值

# 效果展示

1) 适用场景

当有多个写者和多个读者同时对同一个主题进行读写。且读者只想获取特定的写者的数据,或者写者只想对特定的读者发送数据。那么就可以对创建这些写者或读者的发布者或订阅者进行分区,即使所有读者或写者绑定同一个主题,也只会接受同一分区的数据而不被其他分区的数据影响。

2) 使用例子

假设现在有两个发布者和两个订阅者,分别为发布者:publisher1、publisher2 以及订阅者:subscriber1、subscriber2。

publisher2 发出的数据值是 publisher1 发出的数据值+10000。

发布者 publisher1 与订阅者 subscirber1 绑定的是同一主题,publisher2 与 subscriber2 绑定的是同一主题。在分区的时候可能会出现以下情况:

①.publisher1 与 subscirber1 为同一主题的同一分区,publisher2 与 subscriber2 也为同一主题的同一分区。

下图为结果,可以看出,subscirber1 与 subscriber2 都能接收到数据。

图 3 两对都是同一分区

②.publisher1 与 subscirber1 为同一主题的不同分区,publisher2 与 subscriber2 为同一主题的同一分区

下图为结果,可以看出,subscirber1 不能接受数据而 subscriber2 能接收到数据。

图 4 一对同一分区,一对不同

③.publisher1 与 subscirber1 为同一主题的不同分区,publisher2 与 subscriber2 也为同一主题的不同分区

下图为结果,可以看出,subscirber1 与 subscriber2 都不能接受数据。

图 5 两对都不同分区