在两个不同的Java进程之间进行通信

时间:2017-01-05 04:40:23

标签: java sockets process

我有2个java进程,Process1负责将一些外部数据导入数据库,Process2使用相同的数据库运行其余的应用程序,即它将Web模块托管其他所有内容。 Process1通常每天导入一次数据。

我需要的是当Process1完成它的工作时它应该通知Process2它,以便它可以执行一些后续任务。就是这样,这将是他们彼此互动的极限。之后不得再分享其他数据。

不,我知道我可以通过以下方式之一做到这一点:

  1. 让Process1在完成执行后在数据库中写入一个条目,并在Process2中有一个恶魔线程来查找该条目。读取此条目后,完成Process2中的任务。尽管这可能是现有生态系统中最容易实现的,但我认为只为一个通知创建一个线程循环数据库看起来很丑陋。但是,可以通过仅在导入作业启动时启动线程并在收到通知后将其终止来优化它。

  2. 使用套接字。我之前从未使用套接字,所以这可能是一个有趣的学习曲线。但在我的初步阅读之后,我担心这可能是一种矫枉过正。

  3. 使用RMI

  4. 我想听听那些处理类似问题的人,他们选择什么方法以及为什么这样做,也想知道什么是适合我问题的解决方案。

    编辑。 我经历了this,但发现对于进程间通信的启动程序,它缺少基本的例子。这就是我在这篇文章中所看到的。

1 个答案:

答案 0 :(得分:1)

我想说看看Chronicle-Queue

它使用memory mapped file并在堆外保存数据(因此GC没有问题)。此外,为failover方案提供TCP复制。

它可以很好地扩展,并且当有多台计算机可用时支持分布式处理。