Subscriber RTI DDS在同一域上发布数据的两个应用程序。当一个应用程序关闭并重新打开时,它会释放数据。如何解决?

Subscriber RTI DDS在同一域上发布数据的两个应用程序。当一个应用程序关闭并重新打开时,它会释放数据。如何解决?,subscriber,data-distribution-service,publisher,rti-dds,Subscriber,Data Distribution Service,Publisher,Rti Dds,我有两个发布者和订阅者应用程序 应用程序1->发布->学生(1,ABC),学生(2,EFG)。 之后,我运行第二个应用程序。应用程序在同一域上订阅和发布 App2可订阅App1发布的学生(1,ABC)、学生(2,EFG) 然后我发布了数据。App2->发布->教师(1,AAA),教师(2,BBB) 现在我得到了学生(1,ABC),学生(2,EFG),老师(1,AAA),老师(2,BBB) 来自App2 当我关闭app2并再次打开时,我无法订阅此数据 如何订阅在关闭应用程序之前发布的数据? DD

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

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

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

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

您可以为持久性QoS选择四种不同的策略。为了延长数据的生命周期,它们是:

  • VOLATILE
    (默认值):更新仅传递给发布时存在的数据读取器
  • TRANSIENT\u LOCAL
    :只要DataWriter存在,更新就可以传递给DataReader
  • TRANSIENT
    :只要域存在,更新就可以传递给DataReader
  • PERSISTENT
    :即使在域重新启动后,更新仍然可以永久提供给DataReader
对于这些策略中的任何一个,如果使用了
dispose()
调用,或者数据的生命周期过期,数据也会被删除

从您的简短描述来看,您似乎需要为您的持久性QoS选择
TRANSIENT\u LOCAL
策略

有关更多信息,请参见DDS规范中的第2.2.3.4节耐久性,可从网站免费下载