Java 如何从一个程序启动另一个程序

Java 如何从一个程序启动另一个程序,java,detection,recovery,Java,Detection,Recovery,我有两个项目,项目1和项目2 案例1: Project1和Project2位于同一台计算机上。如果project2崩溃或终止,Project1应重新启动project2 案例2: Project1和Project2位于不同的计算机上。如果project2崩溃或终止,Project1应重新启动project2 这些是java项目 我应该如何执行上述任务 编辑: 我正在考虑以下解决方案: 如果项目在同一台机器上,那么我可以将Project2保留在Project1的类路径中,并从Project1重新启

我有两个项目,项目1和项目2

案例1: Project1和Project2位于同一台计算机上。如果project2崩溃或终止,Project1应重新启动project2

案例2: Project1和Project2位于不同的计算机上。如果project2崩溃或终止,Project1应重新启动project2

这些是java项目

我应该如何执行上述任务

编辑:

我正在考虑以下解决方案:

  • 如果项目在同一台机器上,那么我可以将Project2保留在Project1的类路径中,并从Project1重新启动Project2。但是,有一个问题。然后这两个实体将成为一个单独的程序
  • 如果这些项目在不同的计算机上,那么我可能会有第三个程序与project2一起运行,我认为它永远不会崩溃。第三个项目可能会恢复项目2

  • 不确定,关于我的解决方案。您的输入是必需的。

    我们使用RabbitMQ:Project1发送关于使用RabbitMQ的任务的请求,Project2发送关于其取消RabbitMQ的作业的通知。如果Project2在一段时间内(例如,在30秒内)没有发送通知,Project1只使用OS命令启动新的Project2实例,或者发送请求Project3,这些请求在某些机器(如Project1)中仅用于使用OS命令启动Project1实例

    当然,您可以使用任何消息代理,而不仅仅是RabbitMQ

    但是,有一个问题。然后这两个实体将成为一个整体 节目


    不,最好将所有项目作为单独的程序启动,如果Project2出现内存不足等错误,Project1也会死机。使用ProcessBuilder等运行Java应用程序根本不是问题

    案例1:一个应用程序可以启动另一个:ProcessBuilder


    案例2:如所问,准不可能。你需要在项目2的机器上运行一些东西。

    我想不出任何东西。但将编辑问题。可能重复的好,这不是重复。请看案例2。谢谢!!但这是一个分布式系统分配,我们假设使用分布式算法,这就是为什么我不确定是否可以使用RabbitMQ。您可以使用任何JMS查询或远程或本地文件来保存Project1的热节拍。或者Project1可以提供小型Web服务,只返回“一切正常!我正在工作!”是的,我正在使用心跳/ping技术进行故障检测。然而,我被困在恢复部分。恢复部分是最简单的部分,只需使用Os命令运行Project2的应用程序(当然,在Project1和Project2在不同的机器上运行时,您需要在相同的机器上运行Project2的Project3。好的,谢谢!!还有一个问题,我必须使用processbuilder,它将使用os命令来恢复Project2,对吗?