15.6.1.4. 完整示例
给定一个具有以下拓扑的系统:
分配调整示例拓扑
- 参与者 P1 
- 参与者 P2 
- 参与者 P3 
- Topic 1 发布者 
- Topic 1 订阅者 
- Topic 2 订阅者 
- Topic 1 订阅者 
- Topic 2 发布者 
- Topic 1 订阅者 
- Topic 2 订阅者 
总共有 3 个 DomainParticipants。
每个 DomainParticipant 的最大 DataWriters 数为 1。
每个 DomainParticipant 的最大 DataReaders 数为 2。
Topic 1 的 DataWriter 与 3 个 DataReaders 匹配。
Topic 2 的 DataWriter 与 2 个 DataReaders 匹配。
所有的 DataReaders 都恰好与 1 个 DataWriter 匹配。
假设不使用内容过滤,并且将参数大小限制在以下范围内:
- 最大 PartitionQosPolicy 大小:256
- 最大 UserDataQosPolicy 大小:256
- 最大 PropertyPolicyQos 大小:512
下面的代码片段显示了该示例中所需的一组参数。
C++
// DomainParticipant 配置
//////////////////////////////////
DomainParticipantQos participant_qos;
// 我们知道域中有3个参与者
participant_qos.allocation().participants =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(3u);
// 我们知道每个参与者最多有2个读者
participant_qos.allocation().readers =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(2u);
// 我们知道每个参与者最多有1个写入器
participant_qos.allocation().writers =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(1u);
// 我们知道分区数据的最大大小 
participant_qos.allocation().data_limits.max_partitions = 256u;
// 我们知道用户数据的最大大小 
participant_qos.allocation().data_limits.max_user_data = 256u;
// 我们知道属性数据的最大大小 
participant_qos.allocation().data_limits.max_properties = 512u;
// 不使用内容过滤 
participant_qos.allocation().content_filter.expression_initial_size = 0u;
participant_qos.allocation().content_filter.expression_parameters =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(0u);
// Topic 1 的 DataWriter 配置 
///////////////////////////////////////
DataWriterQos writer1_qos;
// 我们知道只有三个匹配的订阅者,没有内容过滤器 
writer1_qos.writer_resource_limits().matched_subscriber_allocation =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(3u);
writer1_qos.writer_resource_limits().reader_filters_allocation =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(0u);
// Topic 2 的 DataWriter 配置 
///////////////////////////////////////
DataWriterQos writer2_qos;
// 我们知道只有两个匹配的订阅者 
writer2_qos.writer_resource_limits().matched_subscriber_allocation =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(2u);
writer2_qos.writer_resource_limits().reader_filters_allocation =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(0u);
// 两个主题的数据读取器配置  
///////////////////////////////////////////
DataReaderQos reader_qos;
// 我们知道只会有一个匹配的发布者 
reader_qos.reader_resource_limits().matched_publisher_allocation =
        eprosima::fastdds::ResourceLimitedContainerConfig::fixed_size_configuration(1u);
XML
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com">
    <participant profile_name="participant_alloc_qos_example">
        <rtps>
            <allocation>
                <!-- 我们知道域中有3个参与者 -->
                <total_participants>
                    <initial>3</initial>
                    <maximum>3</maximum>
                    <increment>0</increment>
                </total_participants>
                <!-- 我们知道每个参与者最多有2个读者 -->
                <total_readers>
                    <initial>2</initial>
                    <maximum>2</maximum>
                    <increment>0</increment>
                </total_readers>
                <!-- 我们知道每个参与者最多有1个写入器 -->
                <total_writers>
                    <initial>1</initial>
                    <maximum>1</maximum>
                    <increment>0</increment>
                </total_writers>
                <max_partitions>256</max_partitions>
                <max_user_data>256</max_user_data>
                <max_properties>512</max_properties>
                <!-- content_filter 无法通过 XML 配置(尚未支持) -->
            </allocation>
        </rtps>
    </participant>
    <data_writer profile_name="allocation_qos_example_pub_for_topic_1">
        <!--我们知道我们将有三个匹配的订阅者,没有内容过滤器 -->
        <matchedSubscribersAllocation>
            <initial>3</initial>
            <maximum>3</maximum>
            <increment>0</increment>
        </matchedSubscribersAllocation>
        <!-- reader_filters_allocation 无法通过 XML 配置(尚未支持) -->
    </data_writer>
    <data_writer profile_name="allocation_qos_example_pub_for_topic_2">
        <!--我们知道我们将有两个匹配的订阅者,没有内容过滤器 -->
        <matchedSubscribersAllocation>
            <initial>2</initial>
            <maximum>2</maximum>
            <increment>0</increment>
        </matchedSubscribersAllocation>
        <!-- reader_filters_allocation 无法通过 XML 配置(尚未支持) -->
    </data_writer>
    <data_reader profile_name="allocation_qos_example_sub">
         <!--我们知道只有一个匹配的发布者-->
         <matchedPublishersAllocation >
             <initial >1 </initial >
             <maximum >1 </maximum >
             <increment >0 </increment >
         </matchedPublishersAllocation >
     </data_reader >
</profiles >
这个示例展示了如何配置 DomainParticipant、DataWriter 和 DataReader,以满足特定系统拓扑中的资源需求。这些配置确保了系统能够有效地管理其资源并保持性能。
内容由零声教学AI助手提供,问题来源于学员提问


 
                             
         
        
 
         
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                