簡體   English   中英

在事務中從 WCF 服務向 REST API 發出 Post 請求

[英]Making a Post request to a REST API from a WCF service in a transaction

我正在做一個 wcf 服務事務的一系列工作。

1.對 rest api 進行 POST 響應。 2.處理 POST req 響應並將其保存在數據庫中。

上面的第 1 步和第 2 步發生在 wcf 事務中,但結果我看到了一個問題,即在出現異常時第 2 步沒有被提交,但第 1 步完成創建不一致。

我已經看到了通過 saga 模式或 2PC 實現這一目標的方法,但找不到任何簡單的實現或解決方法。

PS:我現在不需要回滾數據,只是避免向 REST API 提交請求。 目前我正在通過向 rest api 發出另一個補丁請求來處理這個問題,以恢復在 CATCH BLOCK 中收到的響應。

壞消息:

rest apis沒有2PC。 Rest 根據定義是無狀態的,不包括用於兩階段提交世界的元數據信封,所以你在這里不走運。

另一方面,SOAP 支持WS-Atomic Transaction協議,但我建議您使用 WCF 之類的技術,所有這些都已經實現。 (net core不支持,所以.net框架為此)。

有點好消息:

救援的最終一致性。 SAGA 模式是在微服務領域實現這一目標的一種方式。 在最簡單的形式中,最終的一致性可能是微不足道的,如下所示:

  1. 應用程序 1創建了一個數據庫行,描述了Pending state 中的操作
  2. 應用程序 1發布到 url
  3. 目標 api 以持久方式(在應用程序 1可以訪問的事件總線、隊列甚至數據庫表上)創建具有結果的事件
  4. Application 1的某些服務或后台線程不斷讀取或偵聽該事件總線以獲取 api 的結果
  5. 一旦得到結果,它就會更新在1上創建的行。 它會重試直到可能。 你可以在某個時候停止它。

這種方法的缺點是,如果 5 不斷失敗,您需要手動干預。 涉及更復雜的方面(如補償動作),但我將把它留給你進一步研究。

另一個壞消息

最終一致性沒有開箱即用的實現:(如果您可以將 REST Api 切換到 SOAP 並啟用 WSAT 協議,那么您可以擁有分布式事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM