3.1.2.1.13. PartitionQosPolicy
概述: PartitionQosPolicy(分区QoS策略)允许在域引入的物理分区内部引入逻辑分区。为了使DataReader能够看到DataWriter所做的更改,不仅主题(Topic)必须匹配,还必须至少共享一个逻辑分区。
注意: 空字符串也被视为有效的分区,并且与其他分区名称的匹配遵循相同的字符串匹配和正则表达式匹配规则。
QoS政策数据成员列表:
数据成员名称 | 类型 | 默认值 |
---|---|---|
max_size | uint32_t | 0 (长度无限) |
names | SerializedPayload_t | 空列表 |
- max_size: 列表中分区名称的最大大小。
- names: 分区名称列表。
注意: 此QoS策略适用于发布者(Publisher)和订阅者(Subscriber)实体。可以在端点级别显式定义分区,以覆盖此配置。有关详细信息,请参见相关文档。在启用实体上可以进行更改。
示例代码(C++)
// 本例使用 Publisher,但也可应用于 Subscriber 实体
PublisherQos publisher_qos;
// PartitionsQosPolicy 的默认构造为 max_size = 0
// Max_size 是私有成员,您需要使用 getter 和 setter 来访问
// 将 max_size 更改为 20
publisher_qos.partition().set_max_size(20); // 设置器函数
// PartitionsQosPolicy 默认构造为空的分区列表
// Partitions 是私有成员,因此您需要使用 getter 和 setter 来访问
// 在初始化时添加新分区
std::vector<std::string> part;
part.push_back("part1");
part.push_back("part2");
publisher_qos.partition().names(part); // 设置器函数
// 使用修改后的 QoS 创建对应实体
publisher_ = participant_->create_publisher(publisher_qos);
// 在运行时向集合添加数据
part = publisher_qos.partition().names(); // 获取以保留旧值
part.push_back("part3");
publisher_qos.partition().names(part); // 设置器函数
// 更新对应实体中的 QoS
publisher_->set_qos(publisher_qos);
解释:
这段代码演示了如何创建并配置一个发布者的PartitionQosPolicy。在这个例子中,首先创建了一个PublisherQos
对象,然后通过设置器方法调整了最大分区数和分区名称列表。之后,这些QoS设置被用于创建发布者实体,并在运行时进一步更新了其QoS设置。这种方式使得在不同的数据流之间实现逻辑隔离变得可行,从而增强了数据传输的一致性和灵活性。
内容由零声教学AI助手提供,问题来源于学员提问