2013-07-31 140 views
0

我建立基於asp.net MVC一個BPM之間我的記錄,我工作的兩個系統: -同步兩個單獨的數據庫

  1. 第三方BPM。

  2. 我自己的BPM系統。

目前,當我加入一個新的流程我做了以下內容: -

  1. 在使用它的REST API的第三方應用程序中創建新的進程。
  2. 在我自己的BPM數據庫中創建一個新流程。

但我面臨着以下問題: -

  1. 如何我可以從兩個系統添加/編輯/刪除的記錄是一致的方式,因此,如果在第三,不添加記錄我必須從我的系統中刪除它,反之亦然。

我的流程模型類是: -

public class newprocess 
    { 

     public string name { get; set; } 
     public string activityId { get; set; } 
    public string Status {get; set;} 
    } 

我的操作方法是: -

[HttpPost] 
public ActionResult CreateProcess(string name) { 
using (var client = new WebClient()) 
{ 
try 
{ 
repository.CreateProcess(name,"Pending"); 
repository.save(); 

var query = HttpUtility.ParseQueryString(string.Empty); 
query["j_username"] = "kermit"; 
query["hash"] = "9449B5ABCFA9AFDA36B801351ED3DF66"; 
query["loginAs"] = User.Identity.Name; 
var url = new UriBuilder("http://localhost:8080/jw/web/json/Process/create/" + name.ToString()); 
url.Query = query.ToString(); 
string json = client.DownloadString(url.ToString()); 
var serializer = new JavaScriptSerializer(); 
var myObject = serializer.Deserialize<newprocess>(json); 
string activityid = myObject.activityId; 

if (activityid != null) 
{ 
repository.UpdateProcess(name, "Finish"); 
repository.save(); 
} 

那麼我我的POST操作方法裏面做的,就是: -

  1. 在我的數據庫中創建一個新的記錄,狀態爲「掛起」。
  2. 調用第三方API,並獲得結果。
  3. 如果ActivityID不爲空(在第三方系統中創建成功),我正在更新我的記錄狀態爲「完成」。否則狀態將保持懸而未決。
  4. 我已經構建了一個屏幕,顯示狀態爲「掛起」的所有記錄,管理員將能夠從我自己的數據庫中刪除它們。

所以我的方法是否正常工作,否則會產生我不知道的問題。或者我應該尋找一個完全不同的方法

在此先感謝您的任何幫助。

回答

1

方向看起來不錯。但要記住,完成周期,並考慮更多的選項

根據您的發言「我在做什麼」

1「待定」的狀態創建我的數據庫的新紀錄。

2調用第三方API,並獲得結果。

3如果ActivityID不爲空(在第三方系統中創建成功),我正在更新我的記錄狀態爲「完成」。否則狀態將保持懸而未決。

4我已經構建了一個屏幕,顯示狀態爲「pending」的所有記錄,並且管理員將能夠從我自己的數據庫中刪除它們。

您已經介紹了2階段提交的主要概念。如果一切順利,這將很好。 但你也應該考慮。

  1. 調查,如果只是從理論的角度來看「可靠的消息」。 可能會在這裏矯枉過正。

    1. 如果您沒有收到回覆,該怎麼辦?你不能假設它沒有發佈。 返回流量可能會在對方提交後丟失。 所以你應該跟進檢查是否存在呼叫或手動整理。你實際上需要張貼你的邊條目,而不是每當沒有響應時刪除它。當然,刪除是最有可能的。當然,我不是在說你的身邊收到NOT NOT的消息。這是一個明確的已知狀態。
  2. 如果您的掛起到完成更改提交失敗會發生什麼? 你如何恢復這種情況。 刪除其他人條目?或者在你身邊重試。

  3. 你還應該考慮基本模式/計劃是什麼時,另一方根本無法訪問。接受帖子,將許多帖子記錄爲掛起,並且有一個過程,稍後重試待處理的記錄。或者只是失敗所有新的電話,直到對方可以到達。至少考慮非完美的世界情景並制定計劃。

這是基本模式。並且手動做一些就好了。這是一個計劃,是一個有效的模式。 當然你可以添加工具和邏輯來幫助支持。 例如錯誤處理,自動重試模式。異步確認等。 但是,這是對企業級。以企業成本。

基本上如果採取立場ONE系統負責整體完整性和持續同步。那是最好的開始。你有。您的系統是Orchestrator並負責同步結果。