RTI DDS два приложения, публикующие данные в одном домене. Когда одно приложение закрывается и открывается снова, оно теряет данные. Как решить?

У меня есть два приложения для издателя и подписчика.

  • Приложение1 -> опубликовать -> Студент (1, ABC), Студент (2, EFG). После этого запускаю второе приложение. оба приложения подписываются и публикуются в одном домене
  • Приложение 2 может подписаться на Student (1, ABC), Student (2, EFG), которое публикуется App1, после чего я опубликовал данные. Приложение2-> опубликовать -> Учитель (1, AAA), Учитель (2, BBB) Теперь у меня есть ученик (1, ABC), ученик (2, EFG), учитель (1, AAA), учитель (2, BBB) из Приложение 2
  • когда я закрываю app2 и снова открываю, я не могу подписаться на эти данные Как я могу подписаться на данные, которые я опубликовал перед закрытием приложения? DDS Spy показывает данные, все еще доступные в том же домене.

Может кто-нибудь помочь разобраться?


person Rohit kshirsagar    schedule 15.02.2019    source источник


Ответы (1)


Как я могу подписаться на данные, которые я опубликовал перед закрытием приложения?

Требуемое поведение поддерживается настройкой качества обслуживания Durability Quality of Service (QoS). Он указывает, должны ли опубликованные данные оставаться доступными для доставки поздним присоединяющимся подписчикам, которые присоединились к домену после публикации данных, и в течение какого времени.

Существует четыре различных политики, которые вы можете выбрать для качества обслуживания Durability QoS. В порядке увеличения времени жизни данных они:

  • VOLATILE (по умолчанию): обновления доставляются только в DataReader, которые присутствуют на момент публикации.
  • TRANSIENT_LOCAL: обновления доступны для доставки в DataReader, пока существует DataWriter.
  • TRANSIENT: Обновления доступны для доставки в DataReaders, пока существует домен.
  • PERSISTENT: Обновления всегда доступны для доставки DataReaders, даже после перезапуска домена.

Для любой из этих политик данные также удаляются, если используется вызов dispose() или истекает срок его действия.

Судя по краткому описанию, вам нужно выбрать TRANSIENT_LOCAL политику для качества обслуживания Durability QoS.

Для получения дополнительной информации см. Раздел 2.2.3.4 DURABILITY в спецификации DDS, который можно бесплатно загрузить с Веб-страницу OMG DDS.

person Reinier Torenbeek    schedule 15.02.2019