<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 冪等性定義 **冪等性是系統服務對外一種承諾,承諾只要調用接口成功,外部多次調用對系統的影響是一致的。冪等性并不是所有的接口都需要的。** 如果把操作按照功能分類,那就是增刪改查四種,在 http 協議中則表現為 Get、Post、Put、Delete * Get 方法用于獲取資源,不應當對系統資源進行改變,所以是冪等的。 * Delete 方法用于刪除資源,雖然改變了系統資源,但是第一次和第N次刪除操作對系統的作用是相同的,所以是冪等的。 * 修改操作有可能是冪等的也可能不冪等。 * Post 新增操作天生就不是一個冪等操作,其在 http 協議的定義如下: > The POST method is used to request that the origin server accept the entity enclosed in the request as a **new subordinate**of the resource identified by the Request-URI in the Request-Line. ## 怎么出現的 1. 前端重復提交:提交訂單,用戶快速重復點擊多次,造成后端生成多個內容重復的訂單。 2. 接口超時重試:對于給第三方調用的接口,為了防止網絡抖動或其他原因造成請求丟失,這樣的接口一般都會設計成超時重試多次。 3. 消息重復消費:MQ消息中間件,消息重復消費。 ## 如何解決 1. token機制 ![](https://img.kancloud.cn/a7/a4/a7a43f3fbc358f75093e6e709f58d5c7_732x431.png) 2. 狀態機 主要思路就是通過狀態標識的變更,保證業務中每個流程只會在對應的狀態下執行,如果標識已經進入下一個狀態,這時候來了上一個狀態的操作就不允許變更狀態,保證了業務的冪等性。 比如訂單支付成功后,就把訂單標識為修改為支付成功,現在再次調用訂單支付或者取消接口,會先判斷訂單狀態標識,如果是已經支付過或者取消訂單,就不會再次支付了。 3. 唯一ID,比如訂單號 ![](https://img.kancloud.cn/a4/c1/a4c1fbf013b2ae629498a5e6a43d3f2d_732x424.png) ## 總結 通過以上的了解我們可以知道,唯一id是一個更好的解決方式。 冪等性是開發當中很常見也很重要的一個需求。尤其是金融、支付等行業對其要求更加嚴格,既要有好的性能也要有嚴格的冪等性。除了對其概念的掌握,理解自身業務需求更是實現冪等功能的要點,必須處理好每一個結點細節,一旦某個地方沒有設計完善,最后的結果可能仍舊達不到要求。 ## 參考資料 > https://segmentfault.com/a/1190000020172463
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看