Я пользуюсь prooph (https://github.com/prooph) поэтому у меня есть модель записи, где я храню события, как показано ниже (таблица агрегирования):
когда я запускаю проекцию в фоновом режиме, используя команду:
php bin/console event-store:projection:run card_projection
Я прочитал модель, как показано ниже:
Перед моим фоновым приложением у меня есть API отдыха, где я создаю событие:
CardWasAdded
через URL:
POST /cards
и я получаю код 201.
После этого я обновляю свой список через URL:
GET /cards
Проблема в том, что иногда это новое событие не обрабатывается проекцией.
Итак, вопрос:
Как решить эту проблему?
Мой ответ не является конкретным, но вот некоторые стратегии, которые вы можете использовать в любой системе CQRS:
В стратегии 3 и 4 вы можете использовать какую-то серверную сигнализацию — сокеты или что-то вроде этого. Ваша прочитанная модель может подтвердить, что она обновлена.
Спасибо, Роман, за ответ.
Наконец-то я признал тот факт, что чтение модели имеет задержку.
В моем остальных API, когда я POST новый ресурс, я возвращаю 201 и JSON с новым созданным Id и так далее.
Мое фронтальное приложение, основанное на ответе от нового ресурса POST (POST / карта), добавляет новую запись в таблицу данных в виде новой строки со значком «NEW».
Когда пользователь обновляет список, чтение модели готово (поскольку создание новой записи занимает менее 1 секунды).
В конце нет никакой разницы для пользователя, является ли запись от
POST / карты
или же
GET / карты
так пользовательский опыт в порядке.