После внедрения автоповторов у части пользователей заказы создаются дважды
class RetryInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
repeat(2) {
try { return chain.proceed(chain.request()) } catch (e: IOException) { }
}
return chain.proceed(chain.request())
}
}
Повторы спасли загрузку каталога в метро, но в поддержку пришли жалобы: за один заказ списали деньги дважды. Логи сервера показывают два POST /orders с разницей в 12 секунд. Как исправить, не отказываясь от повторов?
- Ключ идемпотентности в заголовке POST-запроса
- Повторять POST только при коде ответа 500
- Уменьшить число повторов с трёх до двух
- Добавить паузу между повторами в 5 секунд
