通信中间件 Fast DDS(一) :编译、安装和测试

通信中间件 Fast DDS(一) :编译、安装和测试

目录

1.简介      

2.Windows编译、安装和测试

2.1.编译环境准备

2.2.编译安装

2.2.1.安装FastCDR

2.2.2.安装Foonathan Memory

2.2.3.安装FastDDS

2.3.验证安装

3.Linux编译、安装和测试

3.1.编译环境准备

3.2.编译安装

3.2.1.安装FastCDR

3.2.2.安装Foonathan Memory

3.2.3.安装FastDDS

3.3.验证安装

4.跨系统通信

5.常见问题


1.简介      

        DDS 是 OMG 组织发布的一种中间件协议和 API 标准,它将系统的组件集成在一起,提供业务和任务关键型物联网 (IoT) 应用程序所需的低延迟数据连接、极高的可靠性和可扩展架构。

        DDS(Data Distribution Service,数据分发服务) 是一种以数据为中心的通信协议,用于分布式软件应用程序通信。

        它描述了支持 数据提供者(Data Providers)数据消费者(Data Consumers) 之间通信的通信应用程序编程接口 (API) 和通信语义。

        要学习 DDS 就不能忽略它的模型:DCPS(以数据为中心的发布订阅模型)。

        DCPS 有 3 个关键实体:

  1. publication entities: 定义消息生成对象及相关属性
  2. subscription entities:定义消息消费对象及相关属性
  3. configuration entities:定义传输相关的属性如 Topic 类型,通信的 QoS(服务质量)。

        QoS 是一个非常重要的概念,DDS 使用 QoS 来定义 DDS 实体的行为特征。 QoS 由单独的 QoS 策略(源自 QoSPolicy 的类型的对象)组成。

        FastDDS(原名 Fast RTPS)是 eProsima 公司开发的开源 DDS(Data Distribution Service)实现,基于 RTPS 协议,适用于实时通信场景。

        下载地址:https://github.com/eProsima/Fast-DDS

2.Windows编译、安装和测试

2.1.编译环境准备

  • 安装 Visual Studio 2019/2022(需勾选 “Desktop development with C++” 组件)。
  • 安装 CMake(3.16+,添加到系统 PATH)。
CMake基础:安装与配置_windows cmake-ZEEKLOG博客
  • 安装 Git(添加到系统 PATH)。
  • 依赖库(如 OpenSSL、asio)可通过 vcpkg 安装:
vcpkg: 一款免费开源的C++包管理器-ZEEKLOG博客
# 安装vcpkg git clone https://github.com/microsoft/vcpkg .\vcpkg\bootstrap-vcpkg.bat # 安装依赖 .\vcpkg\vcpkg install openssl asio tinyxml2 --triplet x64-windows

由于我的电脑通过cmd命令命令行目录是C:\Users\Administrator,所以vcpkg是安装在C:\Users\Administrator这里:

下载vcpkg源码:

安装 openssl asio tinyxml2:

2.2.编译安装

2.2.1.安装FastCDR

FastDDS 依赖 FastCDR(序列化库),需要获取源码,在cmd命令行直接操作:

# 克隆FastCDR(必须先编译) git clone https://github.com/eProsima/Fast-CDR.git cd Fast-CDR mkdir build && cd build cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds_install cmake --build . --config Release --target install 

安装完成后,在C:\fastdds_install目录有FastCDR的头文件,库文件等信息:

2.2.2.安装Foonathan Memory

FastDDS 依赖 Foonathan Memory(内存管理库),需要获取源码,在cmd命令行直接操作:

# 克隆FastCDR(必须先编译) git clone https://github.com/eProsima/foonathan_memory_vendor.git cd foonathan_memory_vendor mkdir build && cd build cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds_install cmake --build . --config Release --target install

在执行cmake --build . --config Release --target install的时候报错:

于是在网上各种搜索问题原因,始终没有找到解决的办法,于是我到Foonathan Memory的网站去看了一下:

https://github.com/foonathan/memory

找到资料原来Foonathan Memory可以通过vcpkg安装,由于之前安装vcpkg,于是直接进入vcpkg目录,执行下面命令就行:

./vcpkg integrate install ./vcpkg install foonathan-memory

安装完之后,FastDDS的所以依赖就安装完毕,在vcpkg的安装目录下可以看到所有的依赖项:

2.2.3.安装FastDDS

跟安装FastCDR的步骤差不多,不过需要各种依赖库的路径,如下:

git clone https://github.com/eProsima/Fast-DDS.git cd Fast-DDS mkdir build && cd build cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=C:\fastdds -Dfastcdr_ROOT=C:\fastdds_install -DAsio_ROOT=C:\Users\Administrator\vcpkg\packages\asio_x64-windows\include -DTinyXML2_ROOT=C:\Users\Administrator\vcpkg\packages\tinyxml2_x64-windows -Dfoonathan_memory_ROOT=C:\Users\Administrator\vcpkg\packages\foonathan-memory_x64-windows -DOpenSSL_ROOT=C:\Users\Administrator\vcpkg\packages\openssl_x64-windows cmake --build . --config Release --target install

编译安装后,在C:\fastdds目录下有FastDDS的头文件,库文件等信息:

2.3.验证安装

编译完成后,可通过运行 FastDDS 的示例程序验证:

编译:

mkdir build && cd build cmake .. -Dfastcdr_ROOT=C:\fastdds_install -Dfastdds_ROOT=C:\fastdds -DTinyXML2_ROOT=C:\Users\Administrator\vcpkg\packages\tinyxml2_x64-windows -Dfoonathan_memory_ROOT=C:\Users\Administrator\vcpkg\packages\foonathan-memory_x64-windows -DOpenSSL_ROOT=C:\Users\Administrator\vcpkg\packages\openssl_x64-windows cmake --build . --config Release

完成后在Relese目录下有测试程序hello_world.exe, 把hello_world.exe的一些依赖dll拷贝到这个目录下:

在命令行运行hello_world.exe,显示如下:

分别启动两个终端,运行:

# 启动发布者(终端1) .\Hello_World.exe publisher # 启动订阅者(终端2) .\Hello_World.exe subscriber

最终运行的效果(1对1):

1对多,一个发布者,多个订阅者:

若订阅者能收到发布者的消息,说明编译和安装成功。

跨主机通信也是可以的,把上面的Release目录打包拷贝到另外一台windows主机上,一台上做为publisher,一台做为subscriber,subscriber能收到publisher的消息。

3.Linux编译、安装和测试

3.1.编译环境准备

以麒麟系统为例讲解,FastDDS 依赖多个工具和库,需先安装编译环境和依赖项。

# 更新系统包 sudo apt update && sudo apt upgrade -y # 安装基础编译工具 sudo apt install -y build-essential cmake git pkg-config # 安装依赖库 sudo apt install -y libssl-dev libasio-dev libtinyxml2-dev sudo apt install -y openjdk-11-jdk # 用于代码生成工具(可选,部分功能需要)

3.2.编译安装

3.2.1.安装FastCDR

git clone https://github.com/eProsima/Fast-CDR.git cd Fast-CDR mkdir build && cd build # CMake配置(默认安装到/usr/local) cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release # 编译(-j后接CPU核心数,加速编译) make -j$(nproc) # 安装(需要管理员权限) sudo make install cd ../.. # 返回工作目录

3.2.2.安装Foonathan Memory

git clone https://github.com/eProsima/foonathan_memory_vendor.git cd foonathan_memory_vendor mkdir build && cd build # CMake配置(默认安装到/usr/local) cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release # 编译(-j后接CPU核心数,加速编译) make -j$(nproc) # 安装(需要管理员权限) sudo make install cd ../.. # 返回工作目录

3.2.3.安装FastDDS

git clone https://github.com/eProsima/Fast-DDS.git cd Fast-DDS mkdir build && cd build # CMake配置(默认安装到/usr/local) cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release # 编译(-j后接CPU核心数,加速编译) make -j$(nproc) # 安装(需要管理员权限) sudo make install cd ../.. # 返回工作目录

编译到最后的时候,出错了:

从报错的提示说是无法找到make_strand,第一直觉应该是asio的库版本低了,FastDDS要求的asio版本是:

而我的麒麟系统是1.12.2,所以报错了。因此必须升级asio库,于是直接从地址:

https://think-async.com/Asio/Download.html

下载了最新版本,直接安装:

./configure make -j8 make -j8 install

asio库相对来说更简单,由于这个库其实并不需要编译,是一个header-only的库,所以根据命令进行安装就可以了。

然后再用同样的方法安装FastDDS即可。安装完在/usr/local目录下有FastDDS的相关信息:

3.3.验证安装

编译完成后,可通过运行 FastDDS 的示例程序验证。

先编译测试程序:

# 进入示例目录(以HelloWorld为例) cd ~/Fast-DDS/examples/cpp/dds/HelloWorldExample/build # 编译示例(若未自动编译) cmake .. && make -j$(nproc)

分别启两个终端运行测试程序:

# 启动发布者(终端1) ./Hello_World publisher # 启动订阅者(终端2) ./Hello_World subscriber

若订阅者能收到发布者的消息,说明编译和安装成功。

4.跨系统通信

一台windows 11系统主机,一台麒麟系统虚拟机,照样运行各系统的Hello_world,订阅者能收到发布者的消息。

5.常见问题

1.依赖缺失:CMake 报错 “Could NOT find XXX” 时,检查对应依赖是否安装,或通过-DCMAKE_PREFIX_PATH指定依赖路径。

2.版本不兼容:确保 FastDDS 与 FastCDR 版本匹配(参考官方版本矩阵)。

3.权限问题:安装时若提示 “Permission denied”,添加sudo或修改安装路径(如-DCMAKE_INSTALL_PREFIX=$HOME/fastdds)。

通过以上步骤,可在 Linux、Windows 或 macOS 系统上完成 FastDDS 的编译与安装,为后续开发 DDS 应用奠定基础。

Read more

RabbitMQ 消息中间件详解

RabbitMQ 消息中间件详解

RabbitMQ 消息中间件详解 文章目录 * RabbitMQ 消息中间件详解 * 什么是MQ * 核心特性 * 为什么要用MQ * 1. 流量削峰 * 2. 应用解耦 * 3. 异步处理 * MQ的分类 * 1. ActiveMQ * 2. Kafka * 3. RabbitMQ * 4. RocketMQ * MQ的选择 * 选择建议 * RabbitMQ安装部署 * 环境要求 * 单机安装(CentOS 7) * Docker安装(推荐) * 常用管理命令 * RabbitMQ核心概念 * 1. Message(消息) * 2. Publisher(生产者) * 3. Exchange(交换机) * 4. Queue(队列) * 5. Binding(绑定) * 6.

By Ne0inhk
大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略

大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略

系列篇章💥 No.文章1大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅2大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略 目录 * 系列篇章💥 * 前言 * 一、开发环境准备 * (一)Java 版本要求 * (二)Maven 构建工具 * (三)OpenAI API 密钥 * 二、POM依赖引入 * (一)Spring AI与OpenAI集成依赖包 * (二)SpringAI相关依赖包版本管理 * 三、配置文件详解 * 四、核心代码详解 * (一)Application启动类 * (二)基于ChatClient API对话聊天 * 1. 基本对话接口 * 2. 带通用选项对话 * 3.

By Ne0inhk
SQL Server的安装和简单使用

SQL Server的安装和简单使用

目录 一、SQL Server 1.1、简介 1.2、安装包 二、安装SQL Server 2.1、双击安装包 2.2、选择自己想要安装的位置 2.3、点击安装 2.4、安装完成之后会出现以下页面,按照序号依次点击 2.5、不用管密钥,点击下一步 2.6、选择【我接受】 2.7、是否检查更新 2.8、由于我没有Azure的ID什么的,就跳过了直接下一步 2.9、功能选择 2.10、实例配置 2.11、服务账户配置

By Ne0inhk

漏洞修复:F5 Nginx 安全漏洞(CVE-2025-23419)

在nginx.conf对应的location中加入: 1、升级nginx版本  升级到已修复的安全版本(1.26.3 / 1.27.4 或更高版本) 2、禁用 TLS 会话恢复 如果升级确实有困难,可以尝试禁用 TLS 会话恢复作为临时缓解措施 # 针对CVE-2025-23419的缓解:禁用TLS会话票证 (Session Tickets)     ssl_session_tickets off;     #  配置会话缓存(替代会话票证,更安全可控)     ssl_session_cache shared:SSL:10m; # 在worker进程间共享10MB的会话缓存     ssl_session_timeout 5m; # 5分钟后会话缓存过期

By Ne0inhk