2013-07-31 3 views
0

Я строю BPM на основе ASP.NET MVC, я работаю на двух системах: -Синхронизация мои записи между двумя отдельными базами данных

  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. Создайте новую запись в моей базе данных со статусом "pending".
  2. Вызвать сторонний API и получить результат.
  3. Если ActivityID не является нулевым (создайте успехи в сторонней системе), я обновляю статус записи, чтобы быть «законченным». Иначе статус останется в ожидании.
  4. Я построил экран, который отображает все записи со статусом «Ожидание», и администратор сможет удалить их из моей собственной базы данных.

Так будет мой подход работать хорошо, или это создаст проблемы, о которых я не знаю. Или я должен искать совершенно другой подход

Заранее благодарим за любую помощь.

ответ

1

Направление выглядит нормально. Но помните, чтобы завершить цикл и рассмотреть еще несколько вариантов

На основании вашего заявления «что я делаю»

1 Создать новую запись в моей базе данных со статусом «в ожидании».

2 Вызвать сторонний API и получить результат.

3 Если ActivityID не является нулевым (создайте успехи в сторонней системе), я обновляю статус записи, чтобы быть «законченным».Иначе статус останется в ожидании.

4 Я создал экран, на котором отображаются все записи со статусом «Ожидание», и администратор сможет удалить их из моей собственной базы данных.

Вы рассмотрели основную концепцию 2-го этапа. И если все будет хорошо, все будет хорошо. Но вы также должны учитывать.

  1. Исследуйте, если только с точки зрения теории «надежный обмен сообщениями». Может быть здесь слишком много.

    1. Что делать, если вы не получили ответа. Вы не можете предположить, что он не был отправлен. Обратный трафик может потеряться после фиксации на другой стороне. Итак, вы должны следить за проверкой существующих вызовов или вручную убирать. Вам действительно нужно размещать свой боковую запись, а не удалять ее каждый раз, когда нет ответа. Удалить, конечно, наиболее вероятно. Конечно, я не говорю о том, что ваша сторона получает сообщение NOT. Это явное известное состояние.
  2. Что произойдет, если ваш ожидающий завершения коммита завершается с ошибкой? Как вы восстанавливаете эту ситуацию. Удалить другую сторону? или повторите попытку.

  3. Вы также должны рассмотреть, что представляет собой основной шаблон/план, когда другая сторона недоступна. Принимать сообщения, записывать многие как ожидающие и иметь процесс, который позже повторяет ожидающие записи. Или просто не выполняйте все новые вызовы, пока другая сторона не будет доступна. По крайней мере, подумайте о не идеальных мировых сценариях и получите план.

Это основной рисунок. И делать некоторые из них вручную - это нормально. Это план и действительный шаблон. Конечно, вы можете добавить инструменты и логику, чтобы помочь в этом. например, обработка ошибок, автоматические шаблоны повторных попыток. Асинхронные подтверждения и т. Д. Но это относится к уровню предприятия. При стоимости предприятия.

В принципе Если вы берете позицию, ОДНА система отвечает за целостность и постоянную синхронизацию. Это лучшее место для начала. У вас это есть. Ваша система - Orchestrator и отвечает за результаты синхронизации.

Смежные вопросы