假设我有一个API,它调用名为/charge
(POST)的下游服务的API。假设在进行充电时,反向代理发生超时,我得到了5xx
。但是指控实际上发生了。
在这种情况下,我将以5xx
回应我的消费者。现在,如果使用者使用相同的幂等键进行呼叫,则他的请求可以成功,因为下游服务将返回响应的缓存副本。但是,如果他在调用我的API时使用其他幂等密钥,则他将继续获得409s
,因为已经付款了。
这是我的两个问题:
客户端如何知道何时使用相同的idempotentId重试或完全发起新请求?
(扩展上一个问题),UI如何决定使用不同的幂等ID?每个新请求都包含一个新ID,只有重试逻辑会重用同一ID吗?
基本上,我正在尝试从客户端了解幂等密钥 的观点。
答案 0 :(得分:0)
在将失败响应返回给用户之前,应自动重试几次超时。因此,如果错误是暂时性的,则用户将不会注意到任何问题(除非响应延迟可以忽略不计)。
请求发起系统应维护所有请求及其状态的日志。因此,如果故障持续较长时间,则系统可以定期重试失败的请求,并向用户提供已提交请求的详细UI视图。这消除了用户重试请求的需要。系统将代表用户执行此操作。