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. 我已经建立了一个屏幕,显示所有状态为“待定”的记录,管理员将能够从我自己的数据库中删除它们。

所以我的方法会很好地工作,否则会产生我不知道的问题。或者我应该寻找一种完全不同的方法

提前感谢您的帮助。

4

1 回答 1

1

方向看起来还可以。但请记住完成循环并考虑更多选项

根据您的陈述“我在做什么”

1 在我的数据库中创建一条状态为“待定”的新记录。

2 调用第三方API,获取结果。

3 如果ActivityID不为空(在第三方系统中创建成功),我正在更新我的记录状态为“完成”。否则状态将保持未决。

4 我已经建立了一个屏幕,显示所有状态为“待定”的记录,管理员可以从我自己的数据库中删除它们。

您已经介绍了 2 阶段提交的主要概念。如果一切顺利,那就没问题了。但你也应该考虑。

  1. 仅从理论角度调查“可靠消息传递”。在这里可能有点矫枉过正。

    1. 如果您没有收到回复怎么办。你不能假设它没有发布。返回流量可能会在另一端提交后丢失。所以你应该跟进检查存在的电话或手动整理。你实际上需要发布你的边条目而不是每次没有响应时删除它。删除当然是最有可能的。当然,我不是在谈论您的身边收到未发布的消息。那是一个明确的已知状态。
  2. 如果您的待完成更改提交失败会发生什么?你如何恢复这种情况。删除其他条目?或在你身边重试。

  3. 当对方根本无法到达时,您还应该考虑基本模式/计划是什么。接受帖子,将许多帖子记录为待处理,并有一个稍后重试待处理记录的过程。或者只是让所有新呼叫失败,直到可以联系到对方。至少想想不完美的世界场景并制定计划。

这就是基本模式。并且手动做一些是可以的。这是一个计划,是一个有效的模式。当然,您可以添加工具和逻辑来帮助支持这一点。例如错误处理、自动重试模式。异步确认等。但这正在将其带到企业级别。以企业成本为代价。

基本上,如果您采取立场,ONE 系统负责整体完整性和持续同步。那是最好的起点。你有那个。您的系统是 Orchestrator,负责同步结果。

于 2013-07-31T11:54:29.847 回答