RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?

Posted

技术标签:

【中文标题】RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?【英文标题】:RTI DDS two applications publishing data on same domain. When one application closes and reopens it looses the data. How to solve? 【发布时间】:2019-02-15 10:08:31 【问题描述】:

我有两个发布者和订阅者应用程序。

App1 -> 发布 -> 学生(1,ABC),学生(2,EFG)。 之后我运行第二个应用程序。应用程序都在同一个域上订阅和发布 App2 能够订阅由 App1 发布的 Student (1,ABC), Student(2,EFG) 然后我发布了数据。 App2->发布->教师(1,AAA),教师(2,BBB) 现在我得到了学生(1,ABC),学生(2,EFG),老师(1,AAA),老师(2,BBB) 来自 App2 当我关闭 app2 并再次重新打开时,我无法订阅此数据 如何订阅我在关闭申请前发布的数据? DDS Spy 显示同一域上仍有可用数据。

有人可以帮忙理解吗?

【问题讨论】:

【参考方案1】:

如何订阅我在关闭应用程序之前发布的数据 ?

您正在寻找的行为受持续服务质量 (QoS) 设置的支持。它指定发布的数据是否需要保持可用,以便在数据发布后仍可交付给迟到的加入域的订阅者,以及持续多长时间。

您可以为 Durability QoS 选择四种不同的策略。为了增加数据的生命周期,它们是:

VOLATILE(默认):更新仅传递给发布时存在的 DataReader TRANSIENT_LOCAL:只要 DataWriter 存在,更新就可以传递给 DataReaders TRANSIENT:只要域存在,更新就可以传递给 DataReaders PERSISTENT:更新始终可以传送给 DataReaders,即使在域重新启动后也是如此。

对于这些策略中的任何一个,如果使用了 dispose() 调用,或者如果其生命周期到期,数据也会被删除。

从您的简短描述来看,您似乎需要为您的 Durability QoS 选择 TRANSIENT_LOCAL 策略。

有关详细信息,请参阅 DDS 规范中的第 2.2.3.4 节 DURABILITY,可从 OMG DDS webpage 免费下载。

【讨论】:

以上是关于RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

Opensplice DDS 持久数据可以有多大?

使用开源库opendds实现数据分发服务dds 这个是啥意思? 谢谢各位大大~

安波福(Aptiv)选择RTI方案开发自动驾驶系统

当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?

我可以在两个域上拥有两个相同的网站,最好从同一个 Wordpress 运行吗?

想要在没有子域的单个域上运行两个单独的反应应用程序