# HistoryQoS

# 功能介绍

提供数据缓存服务。只要存在一对匹配的 DataWriter 和 DataReader,由 DataWriter 发布的数据就会被交付给 DataReader。发送方会根据 History 的 Kind 值和 Depth 的值在本地保留缓存数据,当用户同时使用 DurabilityQoS 持久化和 ReliabilityQoS 可靠化,DataWriter 可以在创建 DataReader 之前发布数据,在此之后的 DataReader 可以接收到之前的数据。

注意:临时数据的存活周期是根据 LifeSpanQoS 来确定。

# 兼容性

配合 DurabilityQoS 和 ReliabilityQoS 使用。

# 使用方法

HistoryQoS 成员变量。

表 1 HistoryQoS 成员列表
类型 字段名 描述
History- QoSPolicy- Kind kind KEEP_LAST_HISTORY_QOS:缓存最新的数据,具体个数配合 depth 的值确定。 KEEP_ALL_HISTORY_QOS:缓存所有的数据,无需 depth。
unsigned int depth 配合 KEEP_LAST_HISTORY_QOS 一起使用,决定缓存最新的数据的个数。

# DataWriter 端

1) QoS 赋值

对 History 的 kind 赋 KeppLast 或者 KeepAll,对 History 的 depth 赋缓存个数(虽然对 KeppAll 不生效),赋值给 QoS 后,将 QoS 作为参数传入 create_datawriter()。

图 1 DataWriter 的 HistoryQoS 设置

# DataReader 端

1) QoS 赋值

对 History 的 kind 赋 KeppLast 或者 KeepAll,对 History 的 depth 赋缓存个数(虽然对 KeppAll 不生效),赋值给 QoS 后,将 QoS 作为参数传入 create_datareader()。如下图所示。

图 2 DataReader 的 HistoryQoS 的设置

# 效果展示

1) 适用场景

您有一个偶尔发送数据的设备,如果希望 DataReader 接收有效的、旧的或新的数据,可以配合使用该 QoS,这将确保数据读取器在启用后立即获取一些以前的 DDS 示例。

2) 使用例子

我们在 dw 和 dr 上使用 DurabilityQoS 持久化和 ReliabilityQoS 可靠化,先启动 dw 发送数据,depth 设置为 5,dw 发送完五包数据后启动 dr,预想结果是 dr 收得到之前的五包历史数据,如下图所示。

图 3 HistoryQoS 的通信结果