Я пытаюсь использовать модель актерской модели (akka.net с постоянством akka.net, но ищу общий ответ) для построения «рабочего процесса обработки заказа виджетов».
Довольно стандартный:
- Виджет заказов клиентов
- Платеж обработан
- Подтверждение по электронной почте отправлено клиенту
- Отправить сообщение в список выборана склад
- Склад отправляет сообщение «Виджет отправлен» обратно
- Отправляет клиенту сообщение «Ваш товар отправлен»
Теперь скажем, между 4и 5 происходит развертывание / перезапуск сервера.Это приведет к регидратации актера (-ов) (предположим, что пока нет снимка).Это означает, что мы снова обработаем платеж и повторно отправим заказ по электронной почте.Однако оказывается, что нашим клиентам не нравится эта «особенность»!
Как предотвратить повторение неидемпотентных действий при использовании каркаса модели актера?
Я думал о том, чтобы у меня был отдельный магазин «платеж обработан для таблицы БД заказа»;но мне кажется, что я борюсь с фреймворком / парадигмой, и мне интересно, есть ли «правильный» способ сделать это!