2017-02-21 8 views
1

reliable readerreliable writerのRTI DDSアプリケーションがあります。アプリケーションの再起動時にDDSの信頼性の高いリーダーが同じメッセージを受け取る

リーダーアプリケーションを再起動するたびに、リーダーはすでに受信したメッセージを読み取ります。したがって、読者がアプリケーションを再起動するメッセージを受信した場合、アプリケーションが再起動するたびに再起動メッセージが読み込まれるため、再起動ループに入ります。

私は、これらのメッセージが承認され、アプリケーションの再起動前に既に受信されている場合は再送信されないという印象を受けました。なぜ私は読者のアプリケーションの再起動時にすでに読んだメッセージを受信して​​いますか?また、メッセージが送受信されたことを確認する方法もありますか?

+0

ライターとリーダーのQoS設定にDurability 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](信頼性QoS)の信頼性ポリシーの設定を保持する必要があります(https://community.rti.com/static/documentation/connext-dds/5.2.3/doc/api/connext_dds/api_cpp/group__DDSReliabilityQosModule.html)。感謝! –

+0

ありがとう!そのような音は、その場合に行く方法です。 – jgr208

関連する問題