2017-02-21 5 views
1

У меня есть приложение RTI DDS с reliable reader и reliable writer.DDS надежный считыватель, получающий одинаковые сообщения при перезапуске приложения

Всякий раз, когда я перезапускаю приложение-читатель, читатель считывает уже полученные сообщения. Таким образом, в случае, когда читатель получил сообщение для перезапуска приложения, он теперь находится в цикле перезапуска из-за того, что каждое сообщение перезапуска перезагружается.

У меня создалось впечатление, что эти сообщения будут подтверждены и не будут отправлены повторно, если они уже получены до перезапуска приложения. Почему я получаю сообщения, которые я, таким образом, уже прочитал о перезапуске приложения? Также есть ли способ узнать, подтверждены ли сообщения как отправленные и полученные?

+0

У вас есть параметры QoS для Writer и Reader, которые включают политику TRANSIENT_LOCAL для QoS прочности? –

+0

@ReinierTorenbeek да, он включает это. – jgr208

ответ

1

Поскольку ваши настройки QoS имеют политику TRANSIENT_LOCAL для Долговечности, вы наблюдаете ожидаемое поведение. Согласно this documentation, эффект использования TRANSIENT_LOCAL заключается в том, что «RTI Connext будет пытаться сохранить некоторые образцы, чтобы они могли доставляться любому потенциальному позднему соединению DDSDataReader». - в соответствии с требованиями спецификации OMG DDS. Это именно то, что вы видите.

Если вы не хотите такого поведения, выберите политику VOLATILE для Durability на вашем Writer и Reader.

+0

будет ли это поддерживать надежность для любых пропущенных сообщений или нет? – jgr208

+0

Да, будет. Вы должны сохранить настройку политики НАДЕЖНОСТИ для [надежности QoS] (https://community.rti.com/static/documentation/connext-dds/5.2.3/doc/api/connext_dds/api_cpp/group__DDSReliabilityQosModule.html). –

+0

спасибо! Похоже, это способ пойти в этом случае. – jgr208

Смежные вопросы