2012-06-26 75 views
2

我正試圖在java上通過REST實現分佈式服務事務。我有一些問題要問。當在兩個階段提交協議中回滾失敗時會發生什麼

  1. 當資源回答肯定,並且在階段2中它們未能提交時會發生什麼?
  2. 我試圖搜索,但不幸的是我找不到在2PC協議中回滾失敗時會發生什麼的正確答案。我知道它是一個阻塞協議,它等待無限時間的響應,但是在真實世界的情況下會發生什麼?
  3. 分佈式事務管理的其他協議是什麼?
  4. 我讀了關於JTA的事務實現,但是有沒有其他的實現可以用來實現事務? 任何答覆都會有幫助。提前致謝。

回答

1

我沒有這些問題的答案,但我爲我的具體情況創建了一個特定的方法。因此,如果某人在同一案件中需要交易,請在這裏發帖。

因爲在我的情況下,數據庫(或索引器,它也作爲服務運行)中的當前條目沒有變化,但系統中只有新條目在不同的地方,所以錯誤失敗不是有害的,而是錯誤的成功了。因此,對於我的具體情況,我遵循以下策略:

i。所有資源都將一個事務ID添加到數據庫中的行中。在協調員詢問資源的第一階段,所有資源都使用協調員生成的事務標識在數據庫中進行輸入。

ii。在階段1之後,當所有資源都肯定地回答這意味着資源已經對數據庫進行了更改時,協調者在它自己的日誌中記錄事務成功並將其傳送給資源。所有資源都會使插入的數據行中的事務狀態成功。

iii。不斷運行服務以搜索數據庫並通過詢問協調者的狀態來更正事務狀態。如果沒有條目或失敗條目,則事務返回失敗狀態,並且在服務上更新。在獲取數據時,如果數據庫中存在具有失敗標籤的條目,則它總是用協調器檢查事務狀態,如果沒有輸入失敗,它將過濾結果。因此不提供那些沒有信息或有故障信息的數據條目。所以結果總是一致的。

這種策略爲我的情況提供了原子性的一種方法。

+0

當然,使用REST上的任何分佈式事務是非常費力的,我可以通過研究我的需求來繞過這些努力。 – Vickey

相關問題