2015-12-02 144 views
2

我有兩個項目project1和project2。如何從另一個程序啓動一個程序

案例1: Project1和Project2在同一臺機器上。如果project2崩潰或終止,Project1應重新啓動project2。

案例2: Project1和Project2在不同的機器上。如果project2崩潰或終止,Project1應重新啓動project2。

這些是java項目。

我應該如何執行上述任務?

編輯:

我想通過以下方法解決:

  1. 如果項目是在同一臺機器上,然後我可以保留Project2中Project1中的類路徑,並重新從項目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僅使用OS命令啓動新的Project2實例,或發送請求Project3,該請求在Project1等某些計算機中僅用於使用OS命令啓動Project1實例。

當然,您可以使用任何消息代理,而不僅僅是RabbitMQ。

但是,有一個問題。然後這兩個實體將成爲一個單獨的 程序。

不,最好將所有項目作爲獨立程序啓動,如果Project2出現內存不足錯誤等,則Project1也會死機。所有使用ProcessBuilder等運行Java應用程序都不是問題。

+0

謝謝!但它是一個分佈式系統分配,我們假設使用分佈式算法,這就是爲什麼我不確定我是否可以使用RabbitMQ來做到這一點。 –

+0

您可以使用任何JMS查詢或僅使用遠程或本地文件來保存Project1的熱度。或者Project1可以提供小型web服務,只需返回「一切OK!我正在工作!」 –

+0

是的,我正在使用心跳/ ping技術進行故障檢測。但是,我被困在恢復部分。 –

1

案例1:一個應用程序可以啓動另一個:的ProcessBuilder

Executing another application from Java

案例2:準不可能的要求。你需要在項目2的機器上運行一些東西。