Архитектура, управляемая событиями: повторная обработка событий в очереди недоставленных писем приводит к неправильному состоянию модели предметной области - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время я использую архитектуру, управляемую событиями, в микросервисах. У меня есть один вопрос, связанный с системами на основе событий:

Например, предположим, что у меня есть модель Person, которая реагирует на ProfileChangeEvent (содержит имя, которое необходимо обновить человеку). Теперь у меня есть следующая ситуация по шагам:

  1. Измените имя профиля на 'Mike' и publi sh ProfileChangeEvent с name = 'Mike'
  2. Снова измените имя профиля на 'Micheal 'и publi sh ProfileChangeEvent с name =' Michael '
  3. Два события были доставлены в правильном порядке, но первая обработка события завершилась неудачно, и событие попало в очередь недоставленных писем (DLQ), в конечном итоге - человек имя - «Майкл», так как второе событие потребления прошло успешно.
  4. Через некоторое время я заметил это первое неудачное событие в DLQ и повторно опубликовал sh его и его потребление, теперь имя человека - «Майк», неверно, поскольку «Майкл» на самом деле является последним обновленным значением.

Пожалуйста, дайте совет, как поступать в таких ситуациях?

...