2016-05-16 2 views
1

У меня есть проект Java, который действует как промежуточное программное обеспечение для двух других проектов, назовём A и B.Лучший подход/дизайн для этого сценария (Java-код)

А посылает свой выход в мой промежуточного проекта, который выполняет некоторую обработку для каждого инцидента, который существует, и B потребляет выход из моего проекта и отображает каждый инцидент. Вход/вывод представлен в виде XML во всех проектах.

А посылают только случаи, которые в настоящее время открыты с предварительного подключения, а затем идет на живом режиме ожидания для новых инцидентов прийти.

Проблема скажет, если я остановил свой проект на некоторое время и несколько инциденты были закрыты, а затем я снова запускаю свой проект, A будет отправлять только открытые в настоящее время, а B явно требует входного сообщения, чтобы удалить этот инцидент с экрана, и если мой проект middlware был опущен, он никогда не получит этот вход.

Мой подход заключался в регистрации всех инцидентов, поступающих в базу данных из моего проекта, и когда он перезапускается, сравните то, что приходит от A с моей базой данных, и если я найду какие-либо инциденты, которые существуют в базе данных, но не пришли из A, это означает, что он был закрыт, когда мой проект промежуточного программного обеспечения опустился, поэтому я вручную создаю этот вывод XML и отправлю его в B, чтобы удалить его из дисплея.

Однако проблема с этим подходом заключается в том, что сокет для A является живым подключением от моего проекта, то есть сначала A при подключении будет сбрасывать все ранее открытые инциденты, а затем будет ждать вживую на новых. Как бы я узнал, в какое время он закончил сбрасывать старые, поскольку сокет не закрывается, и нет никакого способа узнать, когда мы подключаемся к A, если входящий инцидент принадлежит к старому дампу или недавно созданному инцидент.

Edit: Пример

создать 10 инцидентов на А, они получают отправь middlware и я войти все из них в базу данных, а затем отсылают к B, который отображает их.

Я остановил свою middlware и близкие 3 инцидентов на A. Эти 3 инцидентов все еще отображается на B.

я начинаю промежуточное программное обеспечение, и при соединении А посылает 7 предыдущих открытых инцидентов, а затем идет в прямом режиме ожидая новых инцидентов.

Мое промежуточное ПО отправит 7 обработанных открытых инцидентов в B, которые обновляются на B, но B также требует явных закрытых сообщений, чтобы закрыть эти 3 инцидента, которые все еще отображаются, но они никогда не получат их.

У моей БД есть 10 инцидентов из предыдущего запуска, и поскольку я только получил 7, я знаю, что остальные 3 в БД должны быть закрытыми.

Вопрос в том, что у него есть живая розетка, как мне узнать, когда закончилась предыдущая масса? Где я могу остановить свою обработку, чтобы знать, что я полностью получил более старые инциденты, и перестаю сравнивать мои данные с БД.

ответ

1

Я остановил свою middlware и близкие 3 инцидентов на A. Эти 3 инцидентов все еще отображается на B.

я начинаю промежуточное программное обеспечение, и при соединении А посылает 7 предыдущих открытых инцидентов, а затем продолжается ожидание новых событий.

Поскольку вы закрыли 3 инцидентов, почему вы не изменяющие свой межплатформенное, чтобы вы начать свой Middleware, отправить 3 близкие сообщения, и затем открыть соединение, которое посылает в 7 предыдущих открытых инцидентов, и наконец, идет в режиме реального времени?

+0

Thats the thing! У меня нет возможности узнать после начала моего промежуточного программного обеспечения, что 3 инцидента были закрыты, пока он был вниз. Единственный способ узнать, что сейчас открыто, - это то, что отправляет A после повторного подключения, поэтому, когда все подключено, если 10 инцидентов были открыты, и мы закрываем один инцидент, моя средняя посуда получит это сообщение от A и отправит его в B чтобы закрыть его, но позвольте сказать, если мое промежуточное ПО отключено, что тесное сообщение будет отправлено в эфир, когда я перезапущу свое промежуточное программное обеспечение, я получаю только 9 сообщений от A. – Saad

+0

Эти 9 сообщений попадут в мое промежуточное ПО и будут отправлены как обновить до B, однако, что 1 инцидент, который был закрыт, когда промежуточное программное обеспечение было опущено, все еще отображается на B, пока мы не закроем его вручную. Свойство системы A, которое каждый раз, когда мы подключаемся к нему, получаем все открытые инциденты в сообщениях, затем оно переходит в режиме реального времени, вопрос заключается в том, что с его живым сокетом, и пусть при подключении мы получаем 9 сообщений, соединение по-прежнему остается открытым после этого, в какой момент я могу сказать, что все в порядке, это был момент, когда его движение в режиме реального времени и инциденты, которые придут сейчас, будут не из предыдущего. – Saad

+0

@Saad: Как я уже сказал в своем ответе **, измените ваше промежуточное ПО **. Добавьте графический интерфейс или что-то еще, так что вы можете указать промежуточное программное обеспечение, в котором произошли инциденты **, вы, сами **, закрыты в системе A. –

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