【FastDDS】Layer DDS之Domain (01-overview)
Fast DDS 域(Domain)模块详解
一、域(Domain)概述
域代表一个独立的通信平面,能在共享通用通信基础设施的实体(Entities)之间建立逻辑隔离。从概念层面来看,域可视为一个虚拟网络,一方面将所有在同一域运行的应用程序连接起来,另一方面又将这些应用程序与不同域运行的应用程序隔离开。借助这一特性,多个独立的分布式应用程序可在同一物理网络中共存,既不会相互干扰,甚至不会察觉彼此的存在。
每个域都拥有唯一的标识符,即域ID(domainId),其数据类型实现为uint32
(32位无符号整数)。共享同一域ID的应用程序归属于同一个域,且具备相互通信的能力。
若要将某一应用程序加入特定域,该应用程序必须创建带有对应域ID的域参与者(DomainParticipant)实例。而域参与者实例的创建,需通过域参与者工厂(DomainParticipantFactory)单例(singleton)来完成。
此外,分区(Partitions)在域内部引入了另一级别的实体隔离机制。即便处于同一域的域参与者可相互通信,仍可通过将这些域参与者的发布者(Publishers)和订阅者(Subscribers)分配到不同分区,实现对它们的隔离。
域类图
二、域参与者(DomainParticipant)
(一)域参与者服务质量(DomainParticipantQos)
1. 默认域参与者服务质量(Default DomainParticipantQos)
默认域参与者服务质量为域参与者提供了预设的服务质量配置,在未自定义服务质量参数时,域参与者将采用这一默认配置开展通信相关操作,确保基础通信功能的稳定实现。
(二)域参与者扩展服务质量(DomainParticipantExtendedQos)
域参与者扩展服务质量是对基础域参与者服务质量的补充与扩展,可针对一些特殊场景或更精细的通信需求,提供额外的服务质量参数配置,进一步优化域参与者的通信性能与适配能力。
三、域参与者监听器(DomainParticipantListener)
域参与者监听器主要用于监听域参与者相关的各类事件,当域参与者发生状态变化、接收特定消息或出现异常情况等事件时,监听器可及时捕获这些事件,并触发预设的处理逻辑,帮助开发者实现对域参与者运行状态的实时监控与灵活响应。
四、域参与者工厂(DomainParticipantFactory)
(一)域参与者工厂服务质量(DomainParticipantFactoryQos)
域参与者工厂服务质量用于配置域参与者工厂的运行参数与服务质量标准,这些配置将影响域参与者工厂创建域参与者实例的过程与效果,保障域参与者工厂以符合预期的方式提供服务。
(二)从XML文件加载配置文件(Loading Profiles from an XML File)
该功能支持从XML文件中读取预设的配置文件,开发者可在XML文件中提前定义好域参与者、服务质量等相关配置信息,通过加载该文件,快速完成对应组件的配置初始化,减少代码层面的重复配置工作,提升开发效率与配置的灵活性。
五、域参与者的创建(Creating a DomainParticipant)
(一)基于配置文件的域参与者创建(Profile-Based Creation of a DomainParticipant)
此创建方式以预先定义好的配置文件为依据,在创建域参与者时,直接加载配置文件中与域参与者相关的配置参数,无需在代码中逐一设置,简化了域参与者的创建流程,同时保证了配置的一致性与可维护性。
(二)基于默认配置文件的域参与者创建(DomainParticipant Creation with Default Profile)
当未指定自定义配置文件时,可采用基于默认配置文件的方式创建域参与者。此时,域参与者将使用系统预设的默认配置文件中的参数进行初始化,快速实现域参与者的创建,适用于对配置无特殊要求的基础应用场景。
(三)域参与者的删除(Deleting a DomainParticipant)
在域参与者不再需要使用时,需执行删除操作以释放其占用的系统资源,避免资源浪费。删除域参与者时,需确保其相关的通信连接已正常关闭,相关依赖组件已妥善处理,以保证整个系统的稳定运行。
六、分区(Partitions)
(一)分区中的通配符(Wildcards in Partitions)
在分区配置中,通配符可用于灵活匹配多个分区。通过使用通配符,开发者无需逐一指定每个分区,即可实现对符合特定规则的多个分区的访问与通信,提升分区配置的灵活性与便捷性,适用于分区数量较多或分区名称具有一定规律的场景。
(二)完整示例(Full Example)
完整示例将结合上述域、域参与者、分区等相关知识,通过具体的代码实现与配置说明,展示如何在实际应用中合理运用这些组件与功能,完成分布式应用程序的通信架构搭建,帮助开发者更好地理解与掌握相关技术的实际应用方法。