- 老师提到过如果donate失败了,需要retry,然后payment system就需要从retry queue里面拿message。但我看老师公开课里面的payment system,client是直接talk to payment system,所以是不是那个diagram稍微有些不准确。应该是用户点击donate (checkout)的时候,会产生一个event然后放进一个queue里,然后payment system相当于consumer一样去pull,然后如果失败了再把它放进retry queue里面,继续去pull?
- 再处理用户accidentally click pay button两次的情况里,payment system是先create 一个idempotency key然后直接talk to psp去得到一个payment token,然后store这个token进db,但我看网上很多还会说idempotency key也需要存。理论上是不是不需要了如果我们存了这个payment token?
- client端要怎么实现用户点击多次pay button但是产生的idempotency key是一样的?如果每次都用一个UUID系统会不会non-deterministic?是不是需要用一些deterministic的方法来generate idempotency key?
请问罗辑老师能不能看看以上的问题?感谢了!
- 你说的不准确的 diagram 是公开课里的 diagram 吗?你的理解是对的。我觉得两者不矛盾。
- idempotency key 要存的。是为了保证我们系统内部多个服务之间知道这是同一个 request,也是在外部 PSP timeout 的时候用来再次 query PSP 使用的。
- 这要靠 client 逻辑防止多次发送 request 到服务器。