fastdds:默认qos入门
3.1.2. Policy - 3.3.0
fastdds中qos策略多,使用复杂,可以以默认qos为切入点进行梳理。
(1)fastdds支持的qos分类
①dds标准qos,这类qos是OMG组织定义的dds qos标准,理论上每一个dds实现,都要优先实现这部分的qos。
②fastdds扩展,这部分是fastdds特有的qos,这部分qos应用于rtps。
(2)qos策略适用对象
Publisher、Subscriber、DataWriter、DataReader、Topic均可以应用qos策略,不同的qos策略的使用范围是不一样的:DeadelineQosPolicy适用于Topic、DataWriter、DataReader;TopicDataQosPolicy仅适用于Topic;TransportPriorityQosPolicy适用于Topic和DataWriter;GroupDataQosPolicy适用于Publisher和Subscriber。
具体每种策略的适用范围,可以看官方文档的描述,也可以看fastdds源码,以TopicQos为例,源码中唵TopicQos类来管理,其中的汽油成员如下,说明这些qos策略适用于qos。
class TopicQos
{
private://!Topic Data Qos, NOT implemented in the library.TopicDataQosPolicy topic_data_;//!Durability Qos, implemented in the library.DurabilityQosPolicy durability_;//!Durability Service Qos, NOT implemented in the library.DurabilityServiceQosPolicy durability_service_;//!Deadline Qos, implemented in the library.DeadlineQosPolicy deadline_;//!Latency Budget Qos, NOT implemented in the library.LatencyBudgetQosPolicy latency_budget_;//!Liveliness Qos, implemented in the library.LivelinessQosPolicy liveliness_;//!Reliability Qos, implemented in the library.ReliabilityQosPolicy reliability_;//!Destination Order Qos, NOT implemented in the library.DestinationOrderQosPolicy destination_order_;//!History Qos, implemented in the library.HistoryQosPolicy history_;//!Resource Limits Qos, implemented in the library.ResourceLimitsQosPolicy resource_limits_;//!Transport Priority Qos, NOT implemented in the library.TransportPriorityQosPolicy transport_priority_;//!Lifespan Qos, implemented in the library.LifespanQosPolicy lifespan_;//!Ownership Qos, NOT implemented in the library.OwnershipQosPolicy ownership_;//!Data Representation Qos, (XTypes extension).DataRepresentationQosPolicy representation_;
};
(3)qos策略需要匹配,通信的双方才能通信
通信双方想要通信,qos策略需要匹配才可以,qos策略匹配并不要求双方的qos策略配置完全一致。具体匹配情况需要看个qos策略的介绍。
(4)不同的qos策略不是排他的
多个qos可以同时作用于一个对象,这个时候要注意不同策略的协同,并不是任意的组合都能生效。
TopicQos默认值
默认构造函数中特地对ReliabilityQosPolicy和DurabilityQosPolicy进行了修改。说明对这两个qos策略,不使用默认值,ReliabilityQosPolicy的默认类型是尽力而为,这里改成了可靠。尽力而为类似于网络传输层的udp,可靠网络类似于tcp;DurabilityQosPolicy的默认kind是VOLATILE_DURABILITY_QOS,改为了TRANSIENT_LOCAL_DURABILITY_QOS,则数据会保存在内存中,新上线的DataReader可以读取上线前的数据。那么DataWriter会一直保存吗,内存限制时多少?
DataWriterQos的默认值与TopicQos是一致的,可靠的、保留历史数据的。
DataWriterQos::DataWriterQos()
{reliability_.kind = RELIABLE_RELIABILITY_QOS;durability_.kind = TRANSIENT_LOCAL_DURABILITY_QOS;
}
DataReader、Publihser、SubScriber的默认qos没有做修改,即每种策略均是使用的默认值。