OwnershipQosPolicy 解释
OwnershipQosPolicy 是一种 QoS(Quality of Service)策略,指定是否允许多个 DataWriter 更新同一数据实例。如果允许,则需要规定这些修改如何进行仲裁。以下是该策略的关键内容和组成部分:
QoS 策略数据成员列表
- Data Member Name: 成员名称
- Type: 类型
- Default Value: 默认值
- kind
- 类型:
OwnershipQosPolicyKind
- 默认值:
SHARED_OWNERSHIP_QOS
- 类型:
注意事项
- 此 QoS 策略适用于 Topic、DataReader 和 DataWriter 实体。
- 一旦实体被启用,该策略无法更改。
警告
为了确保 DataWriters 和 DataReaders 的兼容性,它们必须遵循兼容性规则。有关详细信息,请参见兼容性规则部分。
OwnershipQosPolicyKind
有两个可能的值(见 OwnershipQosPolicyKind):
SHARED_OWNERSHIP_QOS
- 表示服务不强制每个实例拥有唯一的所有权。在这种情况下,多个 DataWriter 被允许更新同一数据实例,所有更新将对现有的 DataReader 可用。这些更新也受 TimeBasedFilterQosPolicy 或 HistoryQosPolicy 设置的影响,因此可以进行过滤。
EXCLUSIVE_OWNERSHIP_QOS
- 表示每个实例只能由一个 DataWriter 更新,这意味着在任何时刻,一个单独的 DataWriter 拥有每个实例,并且只有它的修改对现有 DataReaders 可见。所有者可以根据存活 DataWriters 之间的最高权重动态变化,该权重不得违反与数据实例相关的截止合同。权重可以通过 OwnershipStrengthQosPolicy 来更改。如果两个 DataWriters 拥有相同的权重值,则具有较低 GUID 值的数据写入器将成为主题的所有者。
兼容性规则
为了维护 OwnershipQosPolicy 在 DataReaders 和 DataWriters 之间的兼容性,DataWriter 的种类必须等于 DataReader 的种类。
数据写入器种类 | 数据读取器种类 | 兼容性 |
---|---|---|
SHARED_OWNERSHIP_QOS | SHARED_OWNERSHIP_QOS | 是 |
SHARED_OWNERSHIP_QOS | EXCLUSIVE_OWNERSHIP_QOS | 否 |
EXCLUSIVE_OWNERSHIP_QOS | SHARED_OWNERSHIP_QOS | 否 |
EXCLUSIVE_OWNERSHIP_QOS | EXCLUSIVE_OWNERSHIP_QOS | 是 |
示例代码
以下是 C++ 中使用 OwnershipQosPolicy
的示例:
// 创建一个数据写入器 Qos 对象
DataWriterQos writer_qos;
// 默认情况下,OwnershipQosPolicy 构造为 kind = SHARED
// 将 kind 更改为 EXCLUSIVE
writer_qos.ownership().kind = EXCLUSIVE_OWNERSHIP_QOS;
// 使用修改后的 QoS 创建对应实体
writer_ = publisher_->create_datawriter(topic_, writer_qos);
在这个例子中,我们首先创建了一个 DataWriter
的 QoS 设置,然后将所有权策略从共享更改为独占,并用此设置来创建数据写入器实体。这表明只有一个写入器能够更新特定的数据实例,其它写入器不能同时进行操作。
内容由零声教学AI助手提供,问题来源于学员提问