面试我被问到client网络很不好,在send的order request到ticket service时候不容易收到service的ack (client不知道order sent是否成功,也拿不到service生成order的id)。这时候该怎么设计retry和create duplicate order的情况。这是要client自己生成一个order_id作为idempotent key吗?
是的,这就要靠 idempotent request 来解决。
可以问下这个idempotent request 怎么实现吗?这个idempotent key应该由谁来生成呢?idempotent key 也要存在transaction DB吗?
idempotent key 由 client 生成,可以存在 transaction DB 里。每一次向外界发送请求的时候带着idempotent key,然后外部服务在处理的时候会检查这个key是否曾经出现过