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)
有两种可能的值:
BEST_EFFORT_RELIABILITY_QOS: 表示不需要重新传输缺失的样本,因此消息发送时不需要等待到达确认。这意味着新生成的样本频率足够高,以至于不必重新发送任何样本。然而,同一 DataWriter 发送的数据样本将在 DataReader 历史中按照发生顺序存储。换句话说,即使 DataReader 丢失了一些数据样本,旧值也不会覆盖新值。
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++ 示例,但同样适用于 DataReader
和 Topic
实体:
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助手提供,问题来源于学员提问