我想這個問題需要根據自己的系統具體架構來分別討論,這邊拿一個車聯網的系統舉例。
拆除GPS這個功能接口需要分幾個步驟實現(不涉及數據更新的步驟略去了):
①更改GPS設備狀態(設備管理服務)
②更改工單狀態(工單管理服務)
假設調用拆除GPS這個接口的時候,由於各種原因②不能工作了。
架構1:普通的微服務架構
工單管理服務要調用設備管理服務的功能,用的是spring cloud的自己的restTemplate,這個很簡單,加上普通的事務就可以了。
架構2:引入了消息中間件
這個時候,服務之間調用加了一層消息中間件(以activemq為例),這也沒關系,activemq有消息確認機制ACK,可以指定ACK_MODE為SESSION_TRANSACTED=0進行事務提交
,然后再配合原來的數據庫事務,也可以實現。並且activemq還有失敗重發機制,可以嘗試N次重發失敗之后再回滾。
架構3:用到了分庫
那就涉及到多數據源了,這方面spring也可以集成atomiko實現分布式事務。
