2

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

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

有人可以帮助理解吗?

4

1 回答 1

1

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

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

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

  • VOLATILE(默认):更新仅传递给发布时存在的 DataReader
  • TRANSIENT_LOCAL:只要 DataWriter 存在,更新仍然可以传递给 DataReaders
  • TRANSIENT:只要域存在,更新就可以传递给 DataReaders
  • PERSISTENT:即使在域重新启动后,更新仍然可以永久传递给 DataReaders。

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

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

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

于 2019-02-15T15:19:09.233 回答