用户确认收货, 逻辑涉及到如下步骤:
func confirm_order() {
err := update_system1()
if err != nil {
return
}
err = update_system2()
if err != nil {
return
}
call_other_system()
}
实际发现, update_system1调用成功, 但update_system2调用失败, 整个过程是失败的。
于是, 在用户看来, 整个确认收货的过程就失败了。 当用户第二次再点击确认收货的按钮时, system1直接报错,导致用户一直没法确认收货。
这里实际上涉及到幂等性问题, system1需要考虑幂等性, 第二次调用时需要返回already done, 然后confirm_order需要处理这个already done的信息。 收到already done的返回值时, 要认为是正常的, 仍然要让程序继续去调用update_system2
幂等性接口很重要, 我在之前的博文中也聊过。简单, 但需要注意。
不多说。