【问题标题】:Invoking a service on other java application running on the same machine在同一台机器上运行的其他 java 应用程序上调用服务
【发布时间】:2011-10-06 13:30:20
【问题描述】:

我在一个我为个人使用而创建的小型 Java 应用程序上创建了一个命令行界面。 目前 cli 与原始应用程序位于同一个项目中,但我计划将其提取到它自己的项目中,有效地构建 2 个单独的可执行 jar,使我能够根据需要启动 cli 并查询其他正在运行的程序以获取信息.

我正在尝试找出在同一台机器上调用远程服务的最简单、最轻量级的解决方案。 我查看了 spring 远程处理,但许多提供的解决方案,如 HttpInvoker、Hessian/Burlap、JAX RPC Web 服务基于 HTTP 或 SOAP,因此不适合这项工作。 JMS 似乎也有点矫枉过正。

这给我留下了看起来相当重量级的 RMI,可能还有 JMX? 有什么建议吗?

【问题讨论】:

标签: java


【解决方案1】:

JMX 将在底层使用 RMI 进行远程访问。 JMX 旨在公开管理 api(监控/管理)- 不打算用作通用远程处理 api。

从开发的角度来看,带有弹簧远程支持的 RMI 是相当轻量级的。即使是运行时,与您列出的其他选项相比,它也是增加开销最少的选项。

此外,借助弹簧远程处理支持,您可以在以后需要时轻松切换到不同的选项。

看看这个artcile,它比较/基准测试了上述选项的性能。

【讨论】:

  • 那么我将使用 RMI。我想避免 RMI 的主要原因之一是因为我记得几年前您需要使用带有存根和骨架的 rmic 进行额外的编译步骤,但似乎从 J2SE 5.0 版本开始,远程对象的存根类不再需要使用 rmic 存根编译器预先生成,除非远程对象需要支持在 5.0 之前的 VM 中运行的客户端。这是一个很大的优势
【解决方案2】:

我想说这在很大程度上取决于项目/功能的发展方向。 JMX 很容易设置,您可以利用现有的客户端/gui 来查询和设置参数 - 这可以为您节省大量工作。它还可以让您的系统与那里的监控工具集成。

另一方面,如果该功能与管理/监控无关,更多的是与输入和输出数据有关,则一个选项可能是Apache MINA。我过去用过它,效果很好。但是您将有效地创建自己的协议!不过,我怀疑 MINA 最终会不会比简单的 RMI 更“轻量级”。

【讨论】:

    【解决方案3】:

    在个人使用的应用程序中,我会选择 JMX,因为它应该是阻力最小的路径。我过去在这方面有很好的经验。您将能够在几分钟内启动并运行它,并且您不必考虑将数据移动到哪种消息格式(只要您的 bean 是 Serializable,即)。

    在远程调用之前放置一个接口,以便稍后如果 JMX 不合适,您可以插入另一个实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2021-03-02
      • 2019-01-26
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多