DDS开发规范的一些理解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7发现配置
在DDS实现中,参与者参与到应用程序中,必须发现其他参与者。

DDS使用了domain (域)给数据当DDS应用程序写入,参与者链接到域,同时需要确保他们的配置允许每一个参与者来发现其他统一个域的参与者。

DDS提供了一个中心发现方法和点对点发现方法来完成同一个域中的参与者。

中心模式使用一个独立的服务—DCPSInfoRepo服务,点对点模式使用DDS-RTPS发现协议标准来达到无中心的发现。

使用任何一种方法的应用程序能够使用多维配置属性来满足实现需求。

每一种方法都提供了默认配置,如果没有通过命令行或者配置文件进行配置的话。

如何细化配置达到更好的发现性能。

使用多个DCPSInfoRepo服务,或者需要使用DDS-RTPS来满足互操作要求,为了达到这个目的,可以联合使用[domain] [repository]和[rtps_discovery]。

域配置
OpenDDS配置文件使用[domain]部分来配置一个或者多个发现域,每一个域在同一个文件中指定一个发现配置。

OpenDDS应用程序可以使用基于DCPSInfoRepo服务的中心发现模式,或者基于DDS-RTPS发现协议标准的点对点发现方法,或者这两种方法的结合。

DCPSInfoRepo方法对应的类型是[rtps_discovery],一个单独域只能使用一种类型的发现。

看和查看更多[repository]和[rtps_discovery]的配置属性。

一个域可以跟一个整数联系起来,配置文件可以在两种方法支持他。

第一种方法是简单的是例子值和域联系起来,例如:
[domain/1]
DiscoveryConfig=DiscoveryConfig1
(more properties...)
我们的例子使用域关键字来标识域,这个关键字是/1.斜线后面的数值是和域连系的整数值。

另一个可选的方法是使用更加容易识别的名字,增加DomainId属性,同时给它赋值。

[domain/books]
DomainId=1
DiscoveryConfig=DiscoveryConfig1
这个域使用books名字,DomainId赋值1,DDS应用需要这个数值来读取配置。

多个域实例可以在一个配置文件中使用这种方式进行区分。

一旦一个或者多个域实例已经确定,这个域的发现属性必须确定。

在我们以上的例子中,属性DiscoveryConfig必须指向另外还有发现属性的section,或者指定发现的内置变量(DEFAULT_REPO或者DEFAULT_RTPS)例子名字是DiscoveryConfig1。

例子名字必须和[repository] or[rtps_discovery]联系。

我们例子的扩展:
[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor= 在这个例子中我们的域指向[repository],这用来OpenDDS DCPSInfoRepo服务。

可以看
或者有一些情况,当特定域并没有在配置文件中指定。

例如,如果一个OpenDDS应用将域ID3分给他的参与者,上面的例子不支持域ID为3的配置,下面可以用:[common]
DCPSInfoRepo= DCPSDefaultDiscovery=DEFAULT_REPO
[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor= DCPSDefaultDiscovery属性告诉应用如果参与者没有指定域ID 的话就给他指定DEFAULT_REPO发现类型,意思是使用DCPSInfoRepo服务,这个DCPSInfoRepo服务可以在找到。

表7-2中,DCPSDefaultDiscovery属性还有两个数值可以用。

DEFAULT_RTPS连续值通知应用来告诉在文件中没有域配置的参与者使用RTPS发现来发现参与者。

DCPSSefaultiscovery属性的最后选项告诉应用来应用使用其中一种已经定义的配置
作为默认配置提供给那些没有在文件中定义的参与域。

这里有一个例子:
[common]
DCPSDefaultDiscovery=DiscoveryConfig2
[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor=
[domain/2]
DiscoveryConfig=DiscoveryConfig2
[repository/DiscoveryConfig2]
RepositoryIor=
通过在[common]中增加DCPSDefaultiscovery属性,那些没有分配到域id的参与者将使用DiscoveryConfig2的配置。

更多关于RTPS发现的类似配置参看。

这是[domain]可用的属性。

配置应用程序的DCPSInfoRepo
一个OpenDDS DCPSInfoRepo是一个用来参与者发现的本地或者远程节点。

配置参与者应该如何发现DCPSInfoRepo是本节的目的。

假设DCPSInfoRepo服务已经在上启动。

应用程序可以是他们的OpenDDS参与者通过命令行选项或者配置文件发现这个服务。

在我们节的“Running the Example”我们使用命令行参数来发现DCPSInfoRepo服务:Publisher –DCPSInfoRepo –o
DCPSInfoRepo服务在这个文件中产生他的位置对象信息,参与者需要读取这个文件来进行连接。

基于IORs的文件的使用来寻找发现服务,然而在大多数环境中无效,所以应用程序使用命令行选项来拿简单的指定运行DCPSInfoRepo服务的主机和端口:Publisher –DCPSInfoRepo 上面假设DCPSInfoRepo已经在主机上启动:
$DDS_ROOT/bin/DCPSInfoRepo –ORBListenEndpoints ,应该讲发现内容放到文件中,
来降低命令行的复杂性。

配置文件的使用同时能够使多个应用共享通用的OpenDDS配置。

上面的例子可以移动到配置文件的[common]部分:
[common]
DCPSInfoRepo=命令行将变成如下:
publisher –DCPSInfoRepo
我们再来看中的例子,配置文件可以指定域和与这些域相关联的发现配置。

这种情况下RepositoryIor属性将和命令行表达同一个信息,即指定一个运行的DCPSInfoRepo服务。

两个域的配置如下:
[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor=下的DiscoveryConfig属性是域1的所有参与者使用DiscoveryConfig1定义的配置。

这指向了[reposity]部分,RepositoryIor的值为。

最终,当定义了DCPSInfoRepo的DiscoveryConfig属性,还可以包含DEFAULT_REPO。

[common]
DCPSInfoRepo=localhost:12345
[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor=这种情况下,域2的参与者将引用DCPSInfoRepo的发现属性,这个在[common]中已经定义。

如果DCPSInfoRepo的值没有在[common]中提供,将会在命令行中当做一个参数提供:
publisher -DCPSInfoRepo localhost:12345 -DCPSConfigFile
这样设定了DCPSInfoRepo的值,如果参与者在文件中读到了DEFAULT_REPO,这有一个值。

如果DCPSInfoRepo没有在配置文件和命令行中定义,那么他的默认值是file:/。

如前所述,这在应用环境中不能很有效,所以需要通过其中一种方法设定DCPSInfoRepo的值。

配置多个DCPSInfoRepo实例
一个DDS程序中的DDS实体可以关联多个DCPS信息库(DCPSInfoRepo)。

库信息和域关联能够使用配置文件或者通过应用程序API进行配置。

内部默认、命令行参数和配置文件选项会起作用,就像现有应用一样,这些应用不想使用多DCPSInfoRepo关联。

参考图7-2,一个进行使用多个DCPSInfoRepo库。

Process A和B都是配置了进行相互通信,并且在InfoRepo_1中发现其他。

这是基本发现的简单应用。

然而,随着特定域(Domain 1)的使用,上下文的额外层被部署。

DDS实体(data readers/data writers)被限制在同一个域中和其他实体通信。

者提供了一个分割交通的有效方式。

Process C和D配置了相同的方式,运行在域2中,使用InfoRepo_2。

当有一个应用进行需要使用多个域和不同的发现服务时就遇到了问题。

这就是例子中的Process E。

它有两个订阅者,一个订阅者从InfoRepo_1发布,一个从InfoRepo_2。

可以从配置文件中查看如何这样工作。

下面是配置文件,只展示发现部分,不显示传输内容。

[domain/1]
DiscoveryConfig=DiscoveryConfig1
[repository/DiscoveryConfig1]
RepositoryIor= E读到这个配置文件会发现多个domian部分。

每一个域都有一个整数和一个定义的DiscoveryConfig。

对第一个域([domain/1]),DiscoveryConfig属性是用户定义的DiscoveryConfig1值。

这个属性使得OpenDDS实例去寻找repository 或者 rtps_discovery这样的标示和DiscoveryConfig1。

在我们的例子中,找到了[repository/DiscoveryConfig1],这就是域[domain/1]的发现配置。

这部分告诉我们这个域使用的DCPSInfoRepo的地址可以通过RepositoryIor属性得到。

这里他是,端口12345。

RepositoryIor值可以是一个完整的CORBA IOR或者简单主机:端口。

第二个域名字为[domain/2],相应的库部分[repository/DiscoveryConfig2]标示第二个域的配置和InfoRepo_2库。

在一个配置文件中可以有任意数量的域部分或者库。

没有详细配置的域都被关联到默认发现配置上。

每个DCPSInfoRepo可以连接到多个域,然而一个域不能共享给多个DCPSInfoRepo。

这里是[repository]部分的合法属性。

DDS-RTPS发现配置
OMG DDS-RTPS规范给了下面例子来说明OpenDDS使用的发现方法,还有两种不同的协议来完成发现操作。

引用节如下:
RTPS把发现协议划分为两个独立协议
1、参与者发现协议
2、终端发现协议
参与者发现协议(PDP)说明了在一个网络中参与者如何发现彼此。

一旦两个参与者发现彼此,他们在终端使用终端发现协议(EDP)来交换信息。

排除这种因果关系,两种协议都是成熟的
这节讨论的配置选项允许用户指定属性值来改变简单参与者发现协议(SPDP)的行为和检点终端发现协议(SEDP)默认设置。

DDS-RTPS的发现配置可以用简单的简单基本发现来完成,或者是用在中的域。

简单配置通过在我们的例子配置文件的[common]中指定属性来实现。

(for RTPS)
[common]
DCPSDefaultDiscovery=DEFAULT_RTPS
所有DDS-RTPS发现的默认值都是用这种格式采用的。

这个基本配置的不同时指定一部分来抱恨RTPS发现的更多定制参数。

下面的历史使用[common]部分来指向
[]rtps_discovery]部分,跟着一个名为TheRTPSConfig的实例。

[common]
DCPSDefaultDiscovery=TheRTPSConfig
[rtps_discovery/TheRTPSConfig]
ResendPeriod=5
[rtps_discovery/TheRTPSConfig]实例是和默认DDS-RTPS不同的地方。

在我们例子中ResendPeriod=5,实体设置了可用数据读取者和数据写入者公告的间隔,这也是检测网络上其他数据读取者和数据写入者的间隔。

这会修改默认值30s。

如果使用了多个域,。

相关文档
最新文档