...

Синхронизация данных между процессами

Тема в разделе "Вопросы по платформе", создана пользователем software_infotecs, 24 апр 2024.

  1. software_infotecs

    software_infotecs Участник

    У нас есть два процесса работающие с одним и тем же приложением.
    Имеем следующий кейс:
    Процесс "A" принимает из внешней системы событие и меняет статус экземпляра приложения и некоторые данные и сохраняет их.
    Процесс "Б" по элементу "Ожидание статуса", дожидается смены статуса процессом "А" и на основе нового статуса запускает одну из веток обработки.
    Проблема в том что, не смотря на то, что процесса "А" успешно меняет статус(это видно и в логах приложения и по контексту), процесс "Б," после срабатывания "Ожидание статуса", в части случаев имеет актуальные(новые) данные в экземпляре приложения, а в части случаев старые данные. Причем заново прочитать данные из базы не помогает.
    Переприсвоить по совету техподдержки Context.data.app = Context.data.app, тоже не помогает. Различные комбинации таймеров до, после, во время, тоже не помогают.
    Крайне непредсказуемое и непонятное поведение системы. Быть может кто-то сталкивался? Поделитесь, как решаете проблему синхронизации данных между двумя процессами?
  2. dskuznetcov

    dskuznetcov Участник

    Добрый день!

    Сталкивался с похожей проблемой и как я понял, все данные контекста Context автоматически кэшируются.
    Решал я это тем, что получал актуальное приложение с помощью search() через расширение Application (элемент приложение) и System (пользователи, задачи, файлы и т.п.), Global тоже должен работать, но я не проверял.

    И да, нужно иметь ввиду, что события "смена статуса процессом А" и "меняет некоторые данные" происходят асинхронно, т.е. вполне возможно что сперва меняется статус, а уже через какое-то время - данные экземпляра. Рекомендую в качестве теста сделать задержку по времени после принятия события из внешней системы.