【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)

完整示例将结合上述域、域参与者、分区等相关知识,通过具体的代码实现与配置说明,展示如何在实际应用中合理运用这些组件与功能,完成分布式应用程序的通信架构搭建,帮助开发者更好地理解与掌握相关技术的实际应用方法。

相关推荐
LVXIANGAN2 天前
汽车智能座舱中LVDS、CAN、以太网、RTP的区别
自动驾驶·汽车
SunnyRivers2 天前
LangChain中间件详解
中间件·langchain
金刚猿2 天前
06_虚拟机中间件部署_xxl-job 部署
中间件·xxl-job·xxl-job-admin
地平线开发者3 天前
【地平线 征程 6 工具链进阶教程】算子优化方案集锦
算法·自动驾驶
无忧智库4 天前
某港口集团“十五五”智慧港口数字孪生与自动驾驶集卡多车编队系统建设方案深度解析(WORD)
人工智能·机器学习·自动驾驶
Loo国昌4 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
田里的水稻4 天前
OE_ubuntu24.04安装ros2
人工智能·算法·数学建模·机器人·自动驾驶
键盘鼓手苏苏4 天前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
宝贝儿好4 天前
【强化学习】第十章:随机高斯策略
人工智能·python·深度学习·神经网络·机器人·自动驾驶
Coder_Boy_4 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件