2017-02-21 45 views
1

我有一個RTI DDS應用程序,其中reliable readerreliable writerDDS可靠的閱讀器在應用程序重新啓動時獲取相同的消息

無論何時我重新啓動閱讀器應用程序,閱讀器都會讀取已收到的消息。因此,如果閱讀器收到重新啓動應用程序的消息,則由於在每次應用程序重新啓動時都會讀取重新啓動消息,因此它現在處於重新啓動循環。

我的印象是這些消息會被確認,如果在應用程序重新啓動之前已收到,則不會重新發送。爲什麼我收到消息,因此我已閱讀了應用程序重新啓動讀取器?還有一種方法可以查看郵件是否被確認爲發送和接收?

+0

您的寫入器和讀取器的QoS設置是否包含用於持久性QoS的TRANSIENT_LOCAL策略? –

+0

@ReinierTorenbeek是的,它確實包括了這一點。 – jgr208

回答

1

由於您的QoS設置具有持久性的TRANSIENT_LOCAL策略,因此您正在觀察預期的行爲。根據this documentation,使用TRANSIENT_LOCAL的效果是「RTI Connext將嘗試保留一些樣本,以便將它們傳遞給任何潛在的加入後期加入的DDSDataReader」。 - 按照OMG DDS規範的要求。這正是你看到的情況。

如果您不想要這種行爲,請在您的Writer和Reader上選擇VOLATILE策略以獲得持久性。

+0

這樣可以保證任何遺漏信息的可靠性嗎? – jgr208

+0

是的,它會的。您應該爲[可靠性QoS]保留RELIABLE策略的設置(https://community.rti.com/static/documentation/connext-dds/5.2.3/doc/api/connext_dds/api_cpp/group__DDSReliabilityQosModule.html)。 –

+0

謝謝!聽起來這是在這種情況下要走的路。 – jgr208

相關問題