Как гарантированные системы гарантируют надежность при доставке события? - PullRequest
0 голосов
/ 21 ноября 2018

Поскольку в источнике событий хранилище событий не использует транзакции, как мы можем гарантировать, что в случае сбоя нашей бизнес-логики после публикации события событие не будет опубликовано дважды при перезапуске службы?

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

1 Ответ

0 голосов
/ 21 ноября 2018

Я не знаю, что хранилище событий не использует транзакции.Я видел записи транзакций, чтобы гарантировать, что ожидаемая версия события записывается.

Если вы ожидаете хотя бы раз доставки, что, как я полагаю, есть, то вы должны справиться с дедупликацией.Иногда рекомендуется поддерживать индекс всех обработанных сообщений в качестве метода дедупликации, но это не совсем безопасно, поскольку вы просто минимизируете часть кода, в которой можно создать дубликат, но не исключаете возможность вообще,Если вы обрабатываете сообщение, но не обновляете индекс, то вы снова обработаете то же сообщение.Вместо этого вы должны сделать все свои действия идемпотентными.То есть выполнение одного и того же действия дважды приведет к одинаковому результирующему состоянию.Если вы обрабатываете одно и то же сообщение дважды, оно должно обновлять состояние только один раз.

...