Java RMI和JMS有什么区别?

2022-09-01 03:39:38

在Java中设计分布式应用程序时,似乎有一些技术可以解决同一类问题。我已经简要阅读了有关Java远程方法调用Java消息服务的信息,但很难真正看出其中的区别。Java RMI似乎比JMS更紧密耦合,因为JMS使用异步通信,但除此之外,我没有看到任何大的差异。

  • 它们之间有什么区别?
  • 其中一个比另一个更新吗?
  • 哪一种在企业中更常见/更受欢迎?
  • 它们彼此相比有什么优势?
  • 什么时候一个优先于另一个?
  • 它们在实施的难度上是否有很大不同?

我还认为 Web 服务和 CORBA 解决了同样的问题。


答案 1

您已经了解方法调用。如果要在其上调用方法的对象位于其他计算机上,该怎么办?您可以使用 RMI 将呼叫从一台计算机 (客户端) 发送到另一台计算机 (服务器)。客户端将等待(或“阻止”)直到结果从服务器返回。这称为同步操作。

JMS则不同:它允许一台计算机向另一台计算机发送消息 - 就像电子邮件一样。第一个不必等待响应:它可以继续做任何它想做的工作。甚至可能没有回应。这两个计算机系统不一定完全同步工作,因此这称为异步

另一种思考差异的方式:RMI就像打电话,而JMS就像发送短信。

RMI比JMS要老一点,但这并不重要。这两个概念比java要古老得多。

在复杂性上没有太大区别。我认为您应该尝试对每个教程进行教程。RMIJMS

如果您从头开始一个项目,并且不确定要使用哪个项目,那么同步/异步问题可能是最好的决策因素。如果您正在使用现有系统,最好不要引入太多新技术。因此,如果他们已经在使用一个,那么我建议最好坚持使用那个。


答案 2

你不能真正比较两者,它的苹果和橙子。

RMI 是远程过程调用 (RPC) 的一种形式。它是一个轻量级的、特定于 Java 的 API,它期望调用方和接收方在通信时可用。

JMS 是一个可靠的消息传递 API。JMS 提供程序适用于各种消息传递系统。即使其中一方不可用(如果提供程序实现),也可以传递消息。我熟悉的两个是TIBCO和IBM MQ。

RMI不处理保证交付或异步响应,JMS可能会,具体取决于提供商。

JMS允许在可用性意义上进行松散耦合。“Web服务”允许在协议和数据意义上的松散耦合,但在可靠的消息传递方面没有指定太多,尽管有些实现确实包括这一点(Windows Communication Foundation),而有些则没有。

已编辑:根据注释进行了修订。当我在2010年写这个答案时,我的经验实际上是只有一个JMS提供者,我实际上并不知道没有默认的JMS提供者。


推荐