Перейти к содержимому
4 / 15

Как сделать обработчик сообщений идемпотентным, чтобы повтор был безопасен?

Идемпотентный обработчик даёт один и тот же результат при первом и при десятом применении того же сообщения. Достигается это тремя приёмами. Первый — естественная идемпотентность: присвоение статуса или вставка с игнорированием конфликта повторяются безнаказанно, в отличие от уменьшения баланса на сто рублей. Второй — ключ идемпотентности: идентификатор события пишется в таблицу обработанных в той же транзакции, что и бизнес-изменение; вставка не прошла из-за конфликта — значит уже обрабатывали, выходим. Третий — условное изменение по версии, когда применяется только более свежая версия сущности. Ключи хранят дольше, чем максимальный срок повторов, и чистят пачками; дедупликация в памяти процесса или в кэше без транзакции ничего не гарантирует.

Как сделать обработчик сообщений идемпотентным, чтобы повтор был безопасен? | JScriptiser