如何保證訂單狀態一致性?如何保證接口的冪等性?訂單系統保證冪等性?
-
保證冪等性是指保證用戶多次重復操作或請求造成的結果是一致的,不會產生任何副作用
1. 冪等實現流程
以訂單系統為例,假設用戶在付款流程中(此時頁面跳轉到第三方支付頁面),用戶在第三方支付成功之后,切換頁面回到待付款頁面手動關閉訂單,此時的訂單的狀態就出錯了,先被更新成已付款狀態,后又變更成已關閉,造成了訂單狀態不一致的現象出現!這種不加任何防護手段的場景,就違背了冪等性的原則
2.代碼實現
-
自定義注解
//target表示作用對象,所有類型的方法
-
編寫攔截器,處理攔截到的請求
//冪等攔截器
public class MiDengInterceptor implements HandlerInterceptor {
-
在springMVC中配置攔截器
<mvc:interceptor>
<!--攔截的路徑所有-->
<mvc:mapping path="/**"/>
<!--不攔共同資源-->
<mvc:exclude-mapping path="/static/**"/>
<!--攔截器的位置-->
<bean class="com.oracle.shop.security.MiDengInterceptor"></bean>
</mvc:interceptor>
-
在需要的方法上添加注解
//取消訂單
-
在支付完成后,刪除該token,支付完成后的回調頁面
//流程執行結束后,刪除redis當中的token
redisTemplate.delete("uniqueId"+orders.getId());