Я подхожу к ЛАГОМ + CQRS/Event Sourcing в первый раз, и я хотел бы реализовать поведение, как:Как реализовать побочный эффект «истекает после» в Лагоме?
- Вызов службы выполняется (например, с помощью вызова REST API)
- A команда запускается и запускает событие, которое мутирует состояние (например, запускает какой-то таймер).
- По истечении заданного интервала времени таймер должен истечь, поэтому необходимо инициировать новое событие (без других внешних команд) для изменения состояния, чтобы аннулировать таймер.
Первые два шага просты, но как только я запускаю TimerStartedEvent и мутирую состояние, как мне «назначить» событие через определенное время? Как реализовать третий шаг?
Я лично не знаком с Лагомом, но поскольку вы указали Akka в своих тегах, я предлагаю планировщику Akka планировать сообщение о тайм-ауте вашему актеру, если это применимо к вашей ситуации. Я использовал это в приложении Orchestration для работы, которое я написал в прошлом году, что похоже на поведение: вызовите REST API, как только REST API завершит действие Completed, должен запускаться, но в то же время, как вызов REST, использует Akka Scheduler чтобы запланировать время ожидания. В зависимости от того, что приходит в первую очередь к целевому игроку, он определил, как этот вызов завершен – MattEdge
@MattEdge, это хорошая идея! Lagom построен на вершине Akka, поэтому я перечислил его в своих тегах. Единственным «недостатком» является то, что эта внешняя служба должна вызывать некоторый API для 1-й службы для передачи таймаута, поэтому в терминах CQRS она должна выполнять команду для запуска события, которое мутирует состояние. Является ли это «правильным» способом или событие должно генерироваться без специальной команды извне? –
У нас было событие, сгенерированное внутри, после того, как результаты были перенаправлены через REST API на связанный с ним Актер, который затем восстановил команду. Но если Тайм-аут произошел сначала, Actor прекратил действие, и API не смог запросить соответствующего актера (мы зарегистрировали его для целей отслеживания). – MattEdge