RTI DDS两个应用程序在同一个域上发布数据。当一个应用程序关闭并重新打开时,它将丢失数据。如何解决?[英] RTI DDS two applications publishing data on same domain. When one application closes and reopens it looses the data. How to solve?

本文是小编为大家收集整理的关于RTI DDS两个应用程序在同一个域上发布数据。当一个应用程序关闭并重新打开时,它将丢失数据。如何解决?的处理方法,想解了RTI DDS两个应用程序在同一个域上发布数据。当一个应用程序关闭并重新打开时,它将丢失数据。如何解决?的问题怎么解决?RTI DDS两个应用程序在同一个域上发布数据。当一个应用程序关闭并重新打开时,它将丢失数据。如何解决?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

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

有人可以帮忙理解吗?

推荐答案

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

您正在寻找的行为受持续服务质量 (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 网页.

本文地址:https://www.itbaoku.cn/post/1794060.html