ZBLOG

3.1.2.1.16. ReliabilityQosPolicy This QoS Policy indicates the level of reliability offered and requested by the service. See ReliabilityQosPolicy. List of QoS Policy data members: Data Member Name Type Default Value kind ReliabilityQosPoli...

3.1.2.1.16. ReliabilityQosPolicy

概述

此 QoS 策略指示服务所提供和请求的可靠性级别。请参见 ReliabilityQosPolicy。

QoS 策略数据成员列表:

数据成员名称 类型 默认值
kind ReliabilityQosPolicyKind DataReaders 的默认值为 BEST_EFFORT_RELIABILITY_QOS,DataWriters 为 RELIABLE_RELIABILITY_QOS
max_blocking_time Duration_t 100 ms
  • kind: 指定服务在样本交付方面的行为。有关更多详细信息,请参见 ReliabilityQosPolicyKind。

  • max_blocking_time: 配置写操作可以被阻塞的最大持续时间。

注意事项

  • 此 QoS 策略适用于 Topic、DataWriter 和 DataReader 实体。
  • 在启用的实体上无法更改此策略。

重要提示

将此 QoS 策略设置为 BEST_EFFORT_RELIABILITY_QOS 会影响 DurabilityQosPolicy,使得端点表现为 VOLATILE_DURABILITY_QOS。

可靠性QoS策略种类 (ReliabilityQosPolicyKind)

有两种可能的值:

  1. BEST_EFFORT_RELIABILITY_QOS: 表示不需要重新传输缺失的样本,因此消息发送时不需要等待到达确认。这意味着新生成的样本频率足够高,以至于不必重新发送任何样本。然而,同一 DataWriter 发送的数据样本将在 DataReader 历史中按照发生顺序存储。换句话说,即使 DataReader 丢失了一些数据样本,旧值也不会覆盖新值。

  2. RELIABLE_RELIABILITY_QOS: 表示服务将尝试交付所有来自 DataWriter 历史的样本,并期待从 DataReader 收到到达确认。如果存在未接收的先前样本,则同一 DataWriter 发送的数据样本将无法提供给 DataReader。为了重建可供 DataReader 使用的数据快照,服务会重新传输丢失的数据样本。

这种选项可能会阻塞写操作,因此设置了 max_blocking_time,一旦超时,该操作将解锁。但如果在数据发送之前 max_blocking_time 超过,那么写操作将返回错误。

兼容性规则

为了保持 DataReaders 和 DataWriters 之间 ReliabilityQosPolicy 的兼容性,DataWriter 的种类必须大于或等于 DataReader 的种类。不同种类之间的顺序如下:

BEST_EFFORT_RELIABILITY_QOS < RELIABLE_RELIABILITY_QOS
DataWriter 种类 DataReader 种类 兼容性
BEST_EFFORT_RELIABILITY_QOS BEST_EFFORT_RELIABILITY_QOS
BEST_EFFORT_RELIABILITY_QOS RELIABLE_RELIABILITY_QOS
RELIABLE_RELIABILITY_QOS BEST_EFFORT_RELIABILITY_QOS
RELIABLE_RELIABILITY_QOS RELIABLE_RELIABILITY_QOS

示例代码

以下是一个使用 DataWriter 的 C++ 示例,但同样适用于 DataReaderTopic 实体:

DataWriterQos writer_qos;
// ReliabilityQosPolicy 默认构造为 kind = BEST_EFFORT
// 将 kind 更改为 RELIABLE
writer_qos.reliability().kind = RELIABLE_RELIABILITY_QOS;
// ReliabilityQosPolicy 默认构造为 max_blocking_time = 100ms
// 将 max_blocking_time 更改为 1s
writer_qos.reliability().max_blocking_time = {1, 0};
// 使用修改后的 QoS 创建相应实体
writer_ = publisher_->create_datawriter(topic_, writer_qos);

以上内容详细说明了可靠性QoS策略及其如何在数据流传输中发挥作用,包括其配置、兼容性规则以及示例代码,为开发者理解和实现该策略提供了必要的信息。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?