OwnerShip

此策略控制了服务是否允许多个 DataWriter 更新同一个数据对象的实例(由 Topic + key 标识)。

SHARED

此设置表明服务不要求每个实例都是独占的。在这种情况下,多个 writers 允许更新相同的数据对象实例。Topic 的订阅者能够收到所有 DataWriter 的修改(sample 可能由于其它 QoS 被过滤,例如 TIME_BASED_FILTER 或者 HISTORY)。无论如何,数据不会根据写入的 DataWriter 进行过滤。

EXCLUSIVE

此设置数据对象的实例是独占的。换句话说,在任何时间点上,DataReader 只能看到拥有实例所有权的 DataWriter 写入的数据。实例的所有者通过 strength [1] 确认(且数据实例根据 Liveliness 是 alive 的,且没有违反 DEADLINE 约束)。

在以下条件之一时。OwnerShip 可能会发生更改。

  • strength 最高的 DataWriter 修改了 instance。

  • DataWriter 的 strength 发生了更改。

  • 拥有 instance 的 DataWriter 的 liveliness 发生了更改。

  • 拥有 instance 的 DataWriter 错过了 DEADLINE。

系统的行为就好像是由每个 DataReader 独立做出的决定。每个 DataReader 可以在不同的时间检测到所有权的变化。并不要求在特定的时间点上,该主题的所有 Data Reader 对象对实例的拥有者观点是一致的。

不要求 DataWriter 对象知道它们是否拥有特定的实例。如果 DataWriter 修改了当前不属于它的实例,则不会收到错误或通知。

此要求是为了:

  • 保持发布者和订阅者的分离

  • 允许有效地实现策略。

具有相同强度的多个 DataWriter 对象可能会修改同一个实例。如果发生这种情况,服务将选择一个 DataWriter 对象作为“所有者”。没有指定如何选择所有者。但是,需要用于选择所有者的策略使所有 DataReader 对象对作为所有者的特定 DataWriter 做出相同的选择。还要求所有者保持不变,直到强度、活动性发生变化,所有者错过了实例的最后期限,具有更高强度的新DataWriter修改实例,或者服务认为具有相同强度的另一个 DataWriter 修改实例。

独占所有权以实例为基础。也就是说,订阅者可以接收由较低强度数据写入器写入的值,只要这些值影响到未由较高强度数据写入器设置值的实例。

OWNERSHIP_STRENGTH

此 QoS 策略应与所有权策略结合使用。它只适用于所有权类型被设置为 EXCLUSIVE 的情况。 OWNERSHIP_STRENGTH 的值用于确定数据实例的所有权(由密钥标识)。仲裁由 DataReader 执行。执行仲裁的规则见 2.2.3.9.2,EXCLUSIVE kind。

Liveliness

此策略控制了服务使用的机制和参数以确保特定实体在网络上依然存活。liveliness 也能根据 OwnerShip QoS 影响 Entity 的所有权。

此策略有几个设置,既支持定期更新的数据对象,也支持偶尔更改的数据对象。它还允许根据 Liveliness 检测到的故障类型来定制不同的应用程序需求。

AUTOMATIC liveliness 最适合只需要检测进程级别的故障,而不需要检测进程内的应用程序逻辑故障的应用程序。只要 DomainParticipant 依然运行且远程 participant 依然连接,DomainParticipant 中的 entities 就被认为依然存活,而且服务会以固定的速率定期更新 lease。这是最小的开销。

MANUAL(MANUAL_BY_PARTICIPANT 和 MANUAL_BY_PARTICIPANT_BY_TOPIC)要求发布端在 lease 过期之前定期 assert liveliness 以指明 Entity 依然存活。此 action 既可以手动调用 assert_liveliness 也可以通过写入数据来更新。

  • MANUAL_BY_PARTICIPANT 设置认为只要 Participant 中的一个 Entity 是存活的,则其它的 Entity 也是存活的。

  • MANUAL_BY_TOPIC 要求 DataWriter 中至少一个 instance 是存活的。

当以下条件满足时,认为提供的值是兼容的:

  • 若 offered kind >= requested kind 条件为真。优先级为 AUTOMATIC < MANUAL_BY_PARTICIPANT < MANUAL_BY_TOPIC。

  • offered lease_duration ⇐ requested lease_duration 为真。

服务必须探测并保证 LIVELINESS 的更改大于或等于 lease_duration。这确保 LivelinessChangedStatus 至少更新一次,且相关的 Listeners 和 WaitSets 得到通知。

这里的进程概念指的是 Domain

1. DataWriter 的 strength 是 OWNERSHIP_STRENGTH QoS 的值
Last moify: 2023-08-08 05:37:07
Build time:2025-07-18 09:41:42
Powered By asphinx