2015-12-02 3 views
2

У меня есть два проекта, project1 и project2.Как запустить одну программу из другой программы

Дело 1: Project1 и Project2 находятся на одной машине. Если project2 сбой или завершение работы, Project1 должен перезапустить проект2.

Дело 2: Project1 и Project2 находятся на разных машинах. Если project2 сбой или завершение работы, Project1 должен перезапустить проект2.

Это проект java.

Как выполнить вышеупомянутую задачу?

EDIT:

Я думал о следующих решениях:

  1. Если проекты находятся на той же машине, то я могу держать проекта2 в пути к классам Проект1 и перезапустить проекта2 из project1. Но есть проблема. Тогда эти два объекта станут единой программой.
  2. Если эти проекты находятся на разных компьютерах, тогда у меня может быть какая-то третья программа, работающая вместе с project2, которую я предполагаю, никогда не сбой. И эта третья программа может оживить проект2.

Не уверен, о моем решении. Ваш вход необходим.

+0

Ну, я ничего не могу одумать. Но отредактируйте вопрос. –

+0

Возможный дубликат [Выполнение другого приложения с Java] (http://stackoverflow.com/questions/3468987/executing-another-application-from-java) – Fab

+0

Ну, это не дубликат. Пожалуйста, см. Дело 2. –

ответ

2

Мы используем RabbitMQ: Project1 отправляет запросы о задаче, используя RabbitMQ и Project2, отправляет уведомления о своей работе, не устанавливая RabbitMQ. Если Project2 не отправил уведомление в течение некоторого времени (например, в течение 30 секунд) Project1 запускает новый экземпляр Project2 только с помощью команды OS или отправляет запросы Project3, которые на некоторых машинах, подобных Project1, и используются только для запуска экземпляров Project1 с использованием команды OS.

Конечно, вы можете использовать любые брокеры сообщений, а не только RabbitMQ.

Но проблема. Затем эти два объекта станут одной программой .

Нет, лучше всего начинайте все проекты в виде отдельных программ, если Project2 имеет ошибку «Из памяти» или так далее, Project1 также умер. Это не проблема при запуске Java-приложения с помощью ProcessBuilder или так далее.

+0

Спасибо! Но это распределенное системное назначение, и мы предполагаем использовать распределенные алгоритмы, поэтому я не уверен, могу ли я использовать RabbitMQ для этого. –

+0

Вы можете использовать любой JMS-запрос или просто удаленные или локальные файлы, чтобы сохранить тепловой эффект Project1. Или Project1 может предоставить небольшой веб-сервис, который просто возвращает «Все нормально! Я работаю!» –

+0

Да, я использую метод heartbeat/ping для обнаружения сбоев. Тем не менее, я застрял в части восстановления. –

1

Случай 1: одно приложение может начать другую: ProcessBuilder

Executing another application from Java

Случай 2: квази-невозможно, как просили. Вам нужно что-то в машине проекта 2.

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

  • Нет связанных вопросов^_^