因项目需要,最近在学习和使用开源软件OpenDDS,在这里把自己的所学,所用,所想做个记录,以备查看。因个人当前理解的限制,所写内容不一定全部正确,但所有内容是

我操作验证过的。使用环境Debian 4.9.210 x86_64/Linux

摘要

       1、获取学习资料

       2、环境搭建

       3、为我所用

       4、打包DDS库文件

       5、求助渠道

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、获取学习资料

 a. 网上搜索中文资料有很多介绍,先对OpenDDS有了个大概的认知。它是个开源的数据分发

     中间件,有三层:TAO+ACE+DDS,

     其中TAO负责封装数据,让OpenDDS支持跨平台;

     ACE负责数据通信;

    DDS负责数据的分发交互。

 b. 在OpenDDS官网OpenDDS 下载OpenDDS软件包和开发者指南。网站里也有一些对其的

     介绍,看不懂没关系,多看几遍。软件包解压后里面有一些README和md文件也看下,

      还有DOC目录下文档也看下。最重要的是开发者指南文件,里面比较详细的介绍了OpenDDS

     的使用和配置,需要多看几遍,尤其是第二章介绍软件包里的用例,以及第七章OpenDDS的

    common,discovery, transfort配置,对理解OpenDDS如何使用很有帮助。

2、环境搭建

本人使用的是linux系统,内核版本是4.9-12,windows环境方法类似,网上也可以搜到很多介绍。     

 需要材料:

 Perl软件包(主要用于跑OpenDDS的用例和一些环境配置) 地址:Perl Download - www.perl.org

OpenDDS软件包OpenDDS-3.15.tar.gz 地址:https://github.com/objectcomputing/OpenDDS/releases/download/DDS-3.15/OpenDDS-3.15.tar.gz

 ACE+TAO软件包ACE+TAO-2.2a  地址:http://download.ociweb.com/TAO-2.2a/ACE+TAO-2.2a_with_latest_patches.tar.gz

   

首先,安装Perl,  (安装方法在软件包的install.mid里有写)

然后,解压OpenDDS-3.15.tar.gz软件包,得到文件夹OpenDDS-3.15

最后,解压ACE+TAO软件包,得到文件夹ACE_wrappers,然后将此文件夹移入动到上一步得到

          的文件夹OpenDDS-3.15中

编译OpenDDS

       进入解压后的OpenDDS目录,然后运行配置文件,这里会配置编译的环境变量和一些准备工作,其中包括下载ACE+TAO的软件包,由于下载很慢常会失败,因此我们上面手工下载然后解压ACE+TAO到OpenDDS目录。 PS: --prefix=/home/test 是为后面安装OpenDDS指定安装路径的,如果这里不配置,后面安装会报错找不到安装路径。

实际我们编译后就可以使用OpenDDS,安装只是把相关的头文件和库文件打包到指定目录,方便我们打包生成OpenDDS的运行环境。

$ cd OpenDDS-3.15
$ ./configure --prefix=/home/test
$ make

安装OpenDDS

   执行安装命令后,OpenDDS的文件会安装到上一步骤中通过 --prefix指定的 /home/test目录下。

$ make install

 测试OpenDDS

进入目录OpenDDS-3.15/DevGuideExamples/DCPS/Messenger目录,使用perl测试开发者指南里介绍的用例。

如果用例报找不到OpenDDS的库文件,需要手工添加环境变量:

export $LD_LIBRARY_PATH=***/OpenDDS-3.15/lib:***/OpenDDS-3.15/ACE/lib

$ perl run_test.pl

测试通过的化,说明基本的OpenDDS运行环境就搭建好了。但这只是在单机运行了样例,大概率我们需要在两台机器之间通信,下面说下怎样在两台linux计算机之间跑Messenger用例。

两台linux计算机OpenDDS通信

1、首先需要在两台linunx计算机上分别测试通过部署好的OpenDDS用例

2、配置两台计算机的 /etc/hosts 文件,让其内容保持一致,例如:其中10.10.10.10是计算机A的IP地址,Debian10是其hostname; 10.10.10.20是计算机B的IP地址,Debian20是其hostname

  PS: 配置后重启下计算机使其生效。如果不配置,publisher发布者DataWriter在与subcriber订阅者的DataReader建链时报文带的ip地址可能是默认的127.0.0.1,最终无法建立连接。不知道为啥  OpenDDS要读这个文件,而且还会把ip地址map到hostname,然后报文里带的时hostname:port.

10.10.10.10    Debian10
10.10.10.20    Debian20

3、OpenDDS的发布者和订阅者通信前需要先发现对方,这里主要有两种发现方式,一是使用信息仓库的集中发现,另一种是发布者和订阅者直接的对等发现。这里使用的是集中发现,感觉下来这种方式简单些,常用些。

在A计算机:
./DCPSInfoRepo -ORBDebugLevel 10 -DCPSTransportDebugLevel 5 -ORBLogFile DCPSInfoRepo.log -ORBListenEndpoints iiop://10.10.10.10:12345
./subscriber -ORBDebugLevel 10 -DCPSDebugLevel 10 -DCPSTransportDebugLevel 5 -ORBLogFile subscriber.log -DCPSInfoRepo 10.10.10.10:12345

在B计算机:
./publisher -ORBDebugLevel 10 -DCPSDebugLevel 10 -DCPSTransportDebugLevel 5 -ORBLogFile publisher.log -DCPSInfoRepo 10.10.10.10:12345

在A计算机运行集中发现服务DCPSInfoRepo程序和订阅服务,在B计算机运行发布服务。命令中最后带的IP地址都是DCPSInfoRepo服务所在计算机IP地址,命令中还带了打印日志的参数,帮助分析问题,也可以不带。 当然我们也可以把相关的参数配置在.ini文件中,然后执行程序时加载,例如 .\publisher -DCPSConfigFile configuration.ini 具体配置方法可以参考开发者指南的第七章。 

3、为我所用

      可以通过修改OpenDDS-3.15/DevGuideExamples/DCPS/Messenger下的用例代码,发送和订阅我们需要的数据。修改源码前,可以参考开发者指南中关于这个用例代码的讲解。

     修改Messenger.idl文件,定制我们需要发布订阅的数据

     修改Publisher.cpp文件,控制发布数据的方式

     修改DataReaderListenerImpl.cpp文件,控制订阅数据的方式

     这里修改完可以直接在OpenDDS-3.15/DevGuideExamples/DCPS/Messenger目录下make编译生成新的publisher和subcriber文件。OpenDDS默认是用.mpc构建的,编译完会

        在 Messenger目录下生成GNUmakefile, GNUmakefile.Messenger_Idl, GNUmakefile.Messenger_Publisher, GNUmakefile.Messenger_Subscriber四个makefile文件。如果需要

     引入其它编程库,可以直接修改这些makefile文件,让引入的代码参与编译。

     也可以通过CMake构建项目,可以参考文件夹下的README.md文件配置,这里需要cmake版本大于3.8,本人还没有尝试。

 4、打包DDS库文件

          当开发完基于OpenDDS的应用程序,想要在其它linux环境运行时,就需要在环境上部署OpenDDS运行环境。可以通过把OpenDDS运行库打包成.deb文件的方式,安装到需要

        使用的环境。分为下面几个步骤:

         a. 构建你需要放置OpenDDS运行库的目录层次,例如需要安装在 /opt/test/ 目录

        b. 把前面环境搭建章节中,安装的OpenDDS所有文件拷贝到 currentPat/opt/test/目录

        c. 在 currentPath目录下,创建目录 DEBIAN, 然后在DEBIAN目录下touch文件control 和 postinst文件

        d. 编写control文件和postinst文件,然后使用dpkg命令打包即可。control文件必须要有的,里面描述软件的基本情况,postinst文件是可选的,是个脚本,用来处理软件安装后

           需要的操作。还有很多配置文件,可以网上搜索学习

        e. 打包完成后的.deb,可以直接通过dpkg -i ***.deb安装,卸载的话直接 dekg -r ***.deb

$ cd /home/dds
$ mkdir -P opt/test
$ cp ***/opendds install files  opt/test
$ mkdir DEBIAN
$ cd DEBIAN
$ touch control postinst
然后编辑control和postinst文件,这个可以直接网上搜索

$ cd /home/dds
$ dpkg -b ./ dds-test_1.0_amd64_deb
这里就可以生成deb安装包

 5、求助渠道

       在OpenDDS的官网的support网页列举了求助方法Support ,可以查看GitHub上的问题清单Issues · OpenDDS/OpenDDS · GitHub

  翻看问题列表,可能有人和你遇到过同样的问题。或者你也可以提交问题,等待大佬的解答,我提过一个问题,大佬响应比较慢,最后还是我自己解决的。。。

 当然我们还可以百度去碰碰运气 哈哈

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐