DDS 可靠 reader 在应用程序重新启动时收到相同的消息

DDS reliable reader getting same messages on application restart

我有一个带有 reliable readerreliable writer 的 RTI DDS 应用程序。

每当我重新启动 reader 应用程序时,reader 都会读取它已经收到的消息。因此,在 reader 收到重启应用程序的消息的情况下,由于每次重启应用程序都会读取重启消息,因此它现在处于重启循环中。

我的印象是,如果在应用程序重新启动之前已经收到这些消息,它们将被确认而不是重新发送。为什么我在 reader 的应用程序重新启动时收到我已经阅读过的消息?还有一种方法可以查看消息是否被确认为已发送和已接收?

由于您的 QoS 设置具有 TRANSIENT_LOCAL 持久性策略,因此您观察到了预期的行为。根据 this documentation,使用 TRANSIENT_LOCAL 的效果是 "RTI Connext will attempt to keep some samples so that they can be delivered to any potential late-joining DDSDataReader." —— 按照 OMG DDS 规范的要求。这正是您看到的情况。

如果您不希望出现这种行为,select VOLATILE Writer 的耐久性政策和 Reader。