# LatencyBudgetQoS

# 功能介绍

用于声明数据从发送到进入订阅者的接收缓存并通知订阅者,所能接收的最大延时。比如写者发送了一条延时是 4 秒的数据,若有其他优先度高或延时较少的其他数据也一同发送,那么读者就会优先读到有优先度高或者延时较少的数据,到了 4 秒如果还没有被订阅端接受,那么就会强制订阅端接受。

# 兼容性

当且仅当不等式“写者的 duration <= 读者的 duration”为“真”时,DDS 才会认为写者与读者兼容。

# 使用方法

LatencyBudgetQoS 成员列表如下表。

表 1 LatencyBudgetQoS 成员列表
类型 字段名 描述
Duration_t duration 表示数据从写入到被订阅应用程序接受的最大延迟。

# DataWrietr 端

1) QoS 赋值

对 DDS_DataWriterQoS 数据类型的变量 wQoS 下的 latency_budget 的 duration 属性进行赋值。设定数据的最大延时。并在创建写者的时候作为参数传给 create_datawriter。

图 1 DataWriter 的 LatencyBudgetQoS 赋值
### DataReader 端

1) QoS 赋值

对 DDS_DataReadrQoS 数据类型的变量 rQoS 下的 latency_budget 的 duration 属性进行赋值。设定数据的最大延时。并在创建读者的时候作为参数传给 create_datareader。

图 2 DataReader 的 LatencyBudgetQoS 赋值
## 效果展示

1) 适用场景

用于使订阅端不会接收到过时的数据。控制数据的时延,让发送者的数据在时延之内能被订阅端接受。或者当有其他更重要的数据需要优先获取的时候,可以为这些数据让路,让它们首先被获取,然后自己在时延之内再被获取。

2) 使用例子

现有两个写者和两个读者,一对写者和读者没设置 QoS 进行正常收发。另一对写者和读者在启动后会设置 LatencyBudgetQoS 的延迟时间。被设置 QoS 的写者发送的数据比没设置的写者发送的数据大 10000,且发布者每发送一次数据沉睡 4 秒,

下图为设置延时为 1 秒的结果。可以看出,被设置 LatencyBudgetQoS 的读者接收到的数据始终慢于未设置 QoS 的读者,因为被设置 LatencyBudgetQoS 的读者可以在到达延迟时间内再接受,不用直接获取数据并提交。

图 3 延时1秒