FastDDS阿里云DDSRouter安装和使用(失败)

文章目录

  • [安装 DDS Router](#安装 DDS Router)
  • [获取 DDS Router 源码(不走 Release)](#获取 DDS Router 源码(不走 Release))
      • [1️⃣ 克隆源码(走 git,不走 tar.gz)](#1️⃣ 克隆源码(走 git,不走 tar.gz))
      • [2️⃣ 切到 **稳定版本 2.1.x**](#2️⃣ 切到 稳定版本 2.1.x)
    • 构建DDSRouter
    • [方案:手动 clone + 本地安装 cmake_utils](#方案:手动 clone + 本地安装 cmake_utils)
    • [在服务器创建 YAML 文件](#在服务器创建 YAML 文件)
      • [1️⃣ 选择存放目录(推荐)](#1️⃣ 选择存放目录(推荐))
      • [2️⃣ 创建 YAML 文件](#2️⃣ 创建 YAML 文件)
      • [3️⃣ 粘贴以下 **完整可用示例**](#3️⃣ 粘贴以下 完整可用示例)
      • [4️⃣ 保存并退出 vim](#4️⃣ 保存并退出 vim)
    • 先把事实说清楚(现在不是操作问题)
    • 关键认知纠正(非常重要)
      • [Fast DDS 本身就支持 **跨网段数据通信**](#Fast DDS 本身就支持 跨网段数据通信)
    • 现在唯一可行、工业上也常用的方案(重点)
    • [方案:**Fast DDS 原生 TCP + Static Peers(无 Discovery Server、无 DDS Router)**](#方案:Fast DDS 原生 TCP + Static Peers(无 Discovery Server、无 DDS Router))
    • 四、为什么这个方案在你这里是"唯一解"
    • [**三台节点的 XML(可直接用)**](#三台节点的 XML(可直接用))
    • [1️⃣ 服务器节点(只做 TCP 接入点)](#1️⃣ 服务器节点(只做 TCP 接入点))
    • [2️⃣ 发送端](#2️⃣ 发送端)
    • [3️⃣ 接收端](#3️⃣ 接收端)

相关文档:
FastDDS------DDSRouter安装和使用

我选择放弃了,无法使用fastdds进行跨网段通信,部署成本太高,条件不允许,资源有限,还是转为mqtt转发了,组网内使用fastdds吧,哎!


安装 DDS Router

不依赖 Docker、不依赖 GitHub Release、完全源码编译 DDS Router 的方案,严格针对:Alibaba Cloud Linux 3 / x86_64


DDS Router 的真实依赖关系(关键)

DDS Router ≠ Fast DDS 工具

它是一个独立工程,但依赖:

复制代码
Fast DDS      (已经编成功)
Fast CDR
foonathan_memory
yaml-cpp

👉 前 3 个系统里已经有了

👉 现在只需要:yaml-cpp + DDS Router 源码


安装必要系统依赖(一次性)

bash 复制代码
dnf install -y \
  git \
  cmake \
  gcc-c++ \
  make \
  yaml-cpp-devel \
  openssl-devel \
  libatomic

确认 yaml-cpp:

bash 复制代码
rpm -qa | grep yaml-cpp

获取 DDS Router 源码(不走 Release)

1️⃣ 克隆源码(走 git,不走 tar.gz)

bash 复制代码
cd /opt
git clone https://github.com/eProsima/DDS-Router.git
cd DDS-Router

如果 GitHub 访问慢,可用镜像(备用):

bash 复制代码
git clone https://hub.fastgit.org/eProsima/DDS-Router.git

2️⃣ 切到 稳定版本 2.1.x

bash 复制代码
git checkout v2.1.0

构建DDSRouter

安装 colcon + vcs(你系统里默认没有)

bash 复制代码
dnf install -y python3-pip
pip3 install -U colcon-common-extensions vcstool

方案:手动 clone + 本地安装 cmake_utils

单独 clone dev-utils(只拉这一个)

bash 复制代码
cd /opt
git clone https://github.com/eProsima/dev-utils.git

切换到对应版本(非常重要)

DDS Router v2.1.0 对应 dev-utils v1.4.x

bash 复制代码
cd /opt/dev-utils
git checkout v1.4.0

进入 cmake_utils 子项目

bash 复制代码
cd /opt/dev-utils/cmake_utils

确认能看到文件

bash 复制代码
ls CMakeLists.txt

创建构建目录并执行 cmake(关键)

bash 复制代码
mkdir -p build
cd build

cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr/local

编译并安装

bash 复制代码
make -j$(nproc)
make install

验证是否安装成功

bash 复制代码
ls /usr/local/share/cmake_utils/cmake

在服务器创建 YAML 文件

1️⃣ 选择存放目录(推荐)

bash 复制代码
mkdir -p /opt/dds_router
cd /opt/dds_router

2️⃣ 创建 YAML 文件

bash 复制代码
vi dds_router.yaml

3️⃣ 粘贴以下 完整可用示例

适用于你当前三台节点

  • 服务器:00.00.00.00
  • 发送端:000.000.00.00
  • 接收端:0000.00.00.000
yaml 复制代码
version: v3.0

participants:

  - name: router_server
    kind: local
    domain: 0

    transport:
      kind: udp
      listening-addresses:
        - ip: 0.0.0.0
          port: 11811

    whitelist:
      - 00.00.00.00
      - 00.00.00.00

routes:
  - from: router_server
    to: router_server
    topics:
      - name: "*"

logging:
  verbosity: info

⚠️ 注意

  • YAML 对缩进极其敏感,只能用空格
  • 不要使用 Tab

4️⃣ 保存并退出 vim

text 复制代码
Esc
:wq
Enter

先把事实说清楚(现在不是操作问题)

现在遇到的是 三重封锁叠加

  1. Docker Hub 被墙 / 限速

  2. 阿里云镜像仓库里 eProsima/ddsrouter 是私有仓库

    • requested access to the resource is denied权限问题
  3. DDS Router 源码链条已断(cpp_utils 不存在)

👉 结论:
在当前网络 / 系统条件下,DDS Router 无论"二进制 / docker / 源码"全部不可行

环境 + 官方发布策略共同导致的死路


关键认知纠正(非常重要)

❌「跨网段 DDS = 一定要 DDS Router」

这是错误认知

Fast DDS 本身就支持 跨网段数据通信

前提

你必须 关闭 multicast + 使用 TCP/UDP 单播 + 手工指定 peer

也就是说:

Discovery Server / DDS Router 都不是"跨网段的唯一解"


现在唯一可行、工业上也常用的方案(重点)

方案:Fast DDS 原生 TCP + Static Peers(无 Discovery Server、无 DDS Router)

架构图(文字版)

复制代码
发送端 
    |
    |  TCP 单播
    v
服务器 / 中转机 
    |
    |  TCP 单播
    v
接收端
  • 不依赖 multicast
  • 不依赖 discovery server
  • 不依赖 dds router
  • 100% 可控、可部署、可调试

四、为什么这个方案在你这里是"唯一解"

能力 Discovery Server DDS Router Fast DDS TCP
跨网段
依赖外部组件 极高
受网络封锁影响 致命
可控性
你当前能跑

三台节点的 XML(可直接用)

约定

  • 服务器 IP:00.00.00.00
  • TCP 端口:11811
  • Domain:0

1️⃣ 服务器节点(只做 TCP 接入点)

server.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
  <profiles>

    <transport_descriptors>
      <transport_descriptor>
        <transport_id>tcp_server</transport_id>
        <type>TCPv4</type>
        <listening_ports>
          <port>11811</port>
        </listening_ports>
      </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="server_participant" is_default_profile="true">
      <rtps>
        <useBuiltinTransports>false</useBuiltinTransports>
        <userTransports>
          <transport_id>tcp_server</transport_id>
        </userTransports>
      </rtps>
    </participant>

  </profiles>
</dds>

启动方式(你已有 Fast DDS):

bash 复制代码
export FASTDDS_DEFAULT_PROFILES_FILE=/opt/fastdds/server.xml
./your_dds_server_app

2️⃣ 发送端

sender.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
  <profiles>

    <transport_descriptors>
      <transport_descriptor>
        <transport_id>tcp_client</transport_id>
        <type>TCPv4</type>
        <remote_servers>
          <RemoteServer>
            <ip>00.00.00.00</ip>
            <port>11811</port>
          </RemoteServer>
        </remote_servers>
      </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="sender_participant" is_default_profile="true">
      <rtps>
        <useBuiltinTransports>false</useBuiltinTransports>
        <userTransports>
          <transport_id>tcp_client</transport_id>
        </userTransports>
        <builtin>
          <avoid_builtin_multicast>true</avoid_builtin_multicast>
        </builtin>
      </rtps>
    </participant>

  </profiles>
</dds>

3️⃣ 接收端

receiver.xml与 sender 完全一致,只改文件名即可)

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<dds xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
  <profiles>

    <transport_descriptors>
      <transport_descriptor>
        <transport_id>tcp_client</transport_id>
        <type>TCPv4</type>
        <remote_servers>
          <RemoteServer>
            <ip>00.00.00.00</ip>
            <port>11811</port>
          </RemoteServer>
        </remote_servers>
      </transport_descriptor>
    </transport_descriptors>

    <participant profile_name="receiver_participant" is_default_profile="true">
      <rtps>
        <useBuiltinTransports>false</useBuiltinTransports>
        <userTransports>
          <transport_id>tcp_client</transport_id>
        </userTransports>
        <builtin>
          <avoid_builtin_multicast>true</avoid_builtin_multicast>
        </builtin>
      </rtps>
    </participant>

  </profiles>
</dds>

相关推荐
色空大师19 小时前
服务打包包名设置
java·elasticsearch·maven·打包
虎冯河19 小时前
阿里云 + 宝塔面板环境Python 项目从 0 到 1 部署全流
python·阿里云·云计算
China_Yanhy19 小时前
后端开发者的 AWS 大数据指南:从 RDS 到 Data Lake
大数据·云计算·aws
码农很忙20 小时前
从0到1搭建实时日志监控系统:基于WebSocket + Elasticsearch的实战方案
websocket·网络协议·elasticsearch
周之鸥20 小时前
宝塔面板 + 阿里云 DNS 实现 Let’s Encrypt 证书自动续签(详细图文教程)
阿里云·云计算·宝塔面板·let’s encrypt·自动续签
Elastic 中国社区官方博客20 小时前
在 ES|QL 中的混合搜索和多阶段检索
大数据·人工智能·sql·elasticsearch·搜索引擎·ai·全文检索
翼龙云_cloud1 天前
阿里云渠道商:如何手动一键扩缩容ECS实例?
运维·服务器·阿里云·云计算
AKAMAI1 天前
基准测试:Akamai云上的NVIDIA RTX Pro 6000 Blackwell
人工智能·云计算·测试
齐 飞1 天前
使用阿里云的MaxCompute查询sql时报错:DruidPooledPreparedStatement: getMaxFieldSize error
sql·阿里云·odps