# LifeSpanQoS

# 功能介绍

此 QoS 的目的是通过指定 DataWriter 写入的数据的有效时间来避免向接收应用程序交付过时的数据。DataWriter 编写的每个数据样本都有一个相关的过期时间,超过这个时间数据就不应该被交付给任何应用程序。一旦示例过期,数据将从 DataWriter 和 DataReader 缓存中删除。

若发布端和订阅端时间不同步,那么在提交之前,读者的中间件会根据接收到的时间进行判断。也就是数据被读者的中间件接收到后开始计算时间,若该数据在读者中间件的信息缓存内存活时间超过了有效期,那么它就会被清除。

若数据接收者的接收缓存或提供持久性服务的存储器中存在过期的数据,该数据将被丢弃。

# 兼容性

需要配合 ReliabilityQoS 和 DurabilityQoS 使用。

# 使用方法

LifeSpanQoS 成员列表。

表 1 LifeSpanQoS 成员列表
类型 字段名 描述
Duration_t period 对于数据写者(DataWriter)来说:发送数据是给数据添加有效期的标签,由秒和纳秒结合。

# DataWriter 端

1) QoS 设置

我们需要给 lifespan 的 duration 设置秒数和纳秒数来控制数据自有效期,并同时需要配合 DurabilityQoS 持久化使用和 History 的 Depth 缓存数量使用,最后把 QoS 作为参数传入 create_datawriter()。如下图所示。

图 1 DataWriter的LifeSpanQoS设置

# DataReader 端

1) QoS 赋值

我们需要配合 DurabilityQoS 持久化,ReliabilityQoS 可靠和 History 的 Depth 缓存数量使用,最后把 QoS 作为参数传入 create_datareader()。如下图所示。

图 2 DataReader的LifeSpanQoS设置

# 效果展示

1) 适用场景

您有一个偶发数据的设备,您有一个设备需要该设备发出的几包在有效期内的历史数据做分析处理,当这个发送数据的设备设置了 DurabilityQoS 持久化,ReliabilityQoS 可靠化和 LifeSpanQoS 有效期,并在接收设备上设置了 DurabilityQoS 持久化和 ReliabilityQoS 可靠化,您就可以接收到在有效期内的历史数据做分析。

2) 使用例子

我们在 dw 和 dr 上使用 DurabilityQoS 持久化和 ReliabilityQoS 可靠化,并在 dw 上使用 LifeSpanQoS 设置数据为 5s,先启动 dw 发送数据,发一包睡眠 2 秒,depth 设置为 5,dw 发送完五包数据后启动 dr,预想结果是 dr 收得到最近的 3 包历史数据,如下图所示。

图 3 LifeSpan通信结果