Java RMI和JMS有什么区别?

时间:2010-04-05 00:39:26

标签: java java-ee jms rmi distributed-system

在用Java设计分布式应用程序时,似乎有一些技术可以解决同一类问题。我简要介绍了Java Remote Method InvocationJava Message Service,但很难真正看到它们之间的区别。 Java RMI似乎比JMS更紧密耦合,因为JMS使用异步通信,但我没有看到任何重大差异。

  • 他们之间有什么区别?
  • 其中一个比另一个更新吗?
  • 哪一个在企业中更常见/更受欢迎?
  • 他们相互之间有什么优势?
  • 什么时候比另一个更受欢迎?
  • 他们实施的难度有多大差异?

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

2 个答案:

答案 0 :(得分:41)

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

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

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

RMI比JMS稍早,但这并不重要。这两个概念比java早得多。

复杂性没有太大差异。我认为你应该尝试对每一个做一个教程。 RMIJMS

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

答案 1 :(得分:32)

你无法真正比​​较它们的苹果和橘子。

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

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

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

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

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