2013-07-31 145 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并负责同步结果。