RTI QOS继承关系
在RTI Connext中,QoS继承关系是指一个QoS Profile可以从另一个QoS Profile继承配置,从而简化配置过程并提高可重用性。通过继承,子Profile会首先初始化为父Profile的所有QoS设置,然后可以覆盖其中的部分设置。
实现方式
-
单继承: 使用
base_name
属性指定父Profile。例如:
<qos_library name="MyLibrary"><qos_profile name="ChildProfile" base_name="ParentLibrary::ParentProfile"><datawriter_qos><reliability><kind>RELIABLE_RELIABILITY_QOS</kind></reliability></datawriter_qos></qos_profile>
</qos_library>
-
在这个例子中,
ChildProfile
继承了ParentProfile
的所有设置,并覆盖了DataWriter
的reliability
设置。 -
组合(Composition): 从Connext 6开始,支持通过
<base_name>
元素组合多个QoS Snippet(小片段)。例如:
<qos_library name="MyLibrary"><qos_profile name="ComposedProfile" base_name="BaseProfile"><base_name><element>Snippet1</element><element>Snippet2</element></base_name><datareader_qos><history><kind>KEEP_LAST_HISTORY_QOS</kind><depth>10</depth></history></datareader_qos></qos_profile>
</qos_library>
在这个例子中,ComposedProfile
继承了BaseProfile
,并组合了Snippet1
和Snippet2
的设置。
实际例子
以下是一个完整的继承和组合的例子:
<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://community.rti.com/schema/7.5.0/rti_dds_qos_profiles.xsd" version="7.5.0"><qos_library name="ExampleLibrary"><!-- 父Profile --><qos_profile name="BaseProfile"><datawriter_qos><reliability><kind>RELIABLE_RELIABILITY_QOS</kind></reliability></datawriter_qos></qos_profile><!-- 子Profile,继承BaseProfile --><qos_profile name="DerivedProfile" base_name="ExampleLibrary::BaseProfile"><datawriter_qos><history><kind>KEEP_LAST_HISTORY_QOS</kind><depth>5</depth></history></datawriter_qos></qos_profile><!-- 组合多个Snippet --><qos_profile name="ComposedProfile" base_name="DerivedProfile"><base_name><element>Snippet1</element><element>Snippet2</element></base_name><datareader_qos><durability><kind>TRANSIENT_LOCAL_DURABILITY_QOS</kind></durability></datareader_qos></qos_profile></qos_library>
</dds>
在这个例子中:
BaseProfile
定义了DataWriter
的reliability
为RELIABLE
。DerivedProfile
继承了BaseProfile
,并覆盖了history
设置。ComposedProfile
继承了DerivedProfile
,并组合了Snippet1
和Snippet2
,同时为DataReader
设置了durability
。
使用场景
- 简化配置:通过继承和组合,可以避免重复定义相同的QoS设置。
- 提高可维护性:当需要修改某些通用设置时,只需更新父Profile或Snippet即可。
Sources:
- QoS Profile Inheritance and Composition
- RTI Connext Builtin QoS Profiles