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助手提供,问题来源于学员提问