ZBLOG

3.1.2.1.3. DurabilityQosPolicy A DataWriter can send messages throughout a Topic even if there are no DataReaders on the network. Moreover, a DataReader that joins to the Topic after some data has been written could be interested in accessing tha...

DurabilityQosPolicy

在数据分发系统中,DurabilityQosPolicy(持久性质量服务策略)定义了在 DataReader 加入主题时,系统如何处理已经存在的数据样本。其核心功能是确保即使在没有任何 DataReader 的情况下,DataWriter 仍然可以通过一个主题发送消息,并且后续加入的 DataReader 能够访问之前写入的信息。

QoS Policy 数据成员列表:

  • 数据成员名称: kind
    • 类型: DurabilityQosPolicyKind
    • 默认值:
      • 对于 DataReaders: VOLATILE_DURABILITY_QOS
      • 对于 DataWriters: TRANSIENT_LOCAL_DURABILITY_QOS

注意:该QoS策略适用于主题、数据读取器和数据写入器实体,并且一旦启用就无法更改。

重要事项

为了使 DataReader 接收过去的样本,除了设置这个 QoS 策略,还必须将 ReliabilityQosPolicy 设置为 RELIABLE_RELIABILITY_QOS

警告:为了保证数据写入器和读取器之间的兼容性,它们必须遵循兼容性规则。

DurabilityQosPolicyKind

有四种可能的值(见下表):

  1. VOLATILE_DURABILITY_QOS: 忽略过去的样本,新加入的 DataReader 只接收它匹配后的样本。
  2. TRANSIENT_LOCAL_DURABILITY_QOS: 新加入的 DataReader 的历史记录会填充过去的样本。
  3. TRANSIENT_DURABILITY_QOS: 新加入的 DataReader 的历史记录会填充存储在持久存储中的过去样本。
  4. PERSISTENT_DURABILITY_QOS: 类似于 TRANSIENT_DURABILITY_QOS,但也强调了持久存储的重要性。

兼容性规则

为了维持不同种类间的数据写入器和读取器之间的一致性,当它们具有不同的种类值时,数据写入器的种类必须大于或等于数据读取器的种类。各种类之间的顺序如下:

  • VOLATILE_DURABILITY_QOS < TRANSIENT_LOCAL_DURABILITY_QOS < TRANSIENT_DURABILITY_QOS < PERSISTENT_DURABILITY_QOS

可用组合表:

DataWriter kind DataReader kind Compatibility
VOLATILE_DURABILITY_QOS VOLATILE_DURABILITY_QOS Yes
VOLATILE_DURABILITY_QOS TRANSIENT_LOCAL_DURABILITY_QOS No
VOLATILE_DURABILITY_QOS TRANSIENT_DURABILITY_QOS No
TRANSIENT_LOCAL_DURABILITY_QOS VOLATILE_DURABILITY_QOS Yes
TRANSIENT_LOCAL_DURABILITY_QOS TRANSIENT_LOCAL_DURABILITY_QOS Yes
TRANSIENT_LOCAL_DURABILITY_QOS TRANSIENT_DURABILITY_QOS No
TRANSIENT_DURABILITY_QOS VOLATILE_DURABILITY_QOS Yes
TRANSIENT_DURABILITY_QOS TRANSIENT_LOCAL_DURABILITY_QOS Yes
TRANSIENT_DURIBILITY_YES TRANSIENT_UNDERSIGNS Yes

示例代码

以下是一个使用 C++ 的示例,该示例展示了如何设置和应用此 QoS 策略:

// 创建一个 DataWriter Qos 对象
DataWriterQos writer_qos;
// 持久性 QoS 策略默认为 VOLATILE_DURIABLITY
// 将其更改为 TRANSITENTLOCAL
writer_qos.durability().kind = TRANSIENT_LOCAL durability_qo;

// 使用修改过后的 QoS 创建相应实体
writer_ = publisher_->create_datawriter(topic_, writer_qos);

通过以上解释与示例,我们可以了解到,DurabilityQosPolicy 在实现可靠的数据传输中起着至关重要的作用,使得新加入的数据读取者能够获取到之前已经发布的数据。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7779

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?