Java RMI和JMS有什么区别?

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

  • 他们有什么区别?
  • 其中一个比另一个新?
  • 哪一种在企业中比较普遍/受欢迎?
  • 他们彼此有什么优势?
  • 什么时候比其他人更喜欢?
  • 他们在执行方面有多难?

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

你不能真正比较它们的苹果和橘子。

RMI是远程过程调用(RPC)的一种forms。 这是一个轻量级,Java特定的API,希望调用者和接收者在通信时可用。

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

RMI不处理有保证的交付或asynchronous响应,JMS可能取决于提供者。

JMS在可用性方面允许松耦合。 “Web服务”允许在协议和数据的意义上松散耦合,但是并没有详细说明可靠的消息传递的方式,尽pipe一些实现包括这个(Windows Communication Foundation),有些不包含这个。

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

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

JMS是不同的:它允许一台计算机向另一台计算机发送消息,比如电子邮件。 第一个不必等待回应:它可以继续做任何想要的工作。 甚至可能没有回应。 这两个计算机系统不一定完全一样,所以这被称为asynchronous

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

RMI比JMS稍微老一点,但这并不是真正的相关性。 这两个概念比java要古老得多。

复杂性没有太大的差别。 我认为你应该尝试在每一个教程。 RMI和JMS

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

远程方法调用(RMI) :1.Java的本地RPC接口2.远程对象可以使用与本地对象类似的语义运行3.默认实现使用专有的二进制通信协议,但是RMI可以通过SOAP实现

Java消息传递系统(Java Messaging System,JMS) 1.Java的面向消息中间件的接口和规范2.数据包可以被传送到消息队列和asynchronous操作的主题。 队列或主题不需要远程3.JMS服务器可以使用RMI,SOAP等。

  • RMI用于在彼此之间交stream紧密耦合的应用程序,而不是用于松散耦合的JMS。
  • RMI用于asynchronous(实时聊天),但JMS同时使用(离线聊天)。

  • 在RMI中,主要是对象序列化,但在JMS中可能不需要它

以上是关于上述术语的更多细节

RMI和JMS中松散紧密的含义是什么?

消息传递使松散耦合的分布式通信成为可能。 组件将消息发送到目标,并且收件人可以从目标中检索消息。 但是,发送者和接收者不必同时可用以进行通信。 实际上,发送者不需要知道接收者的任何信息; 接收者也不需要知道关于发送者的任何信息。 发送者和接收者只需要知道什么消息格式和什么目的地使用。 在这方面,消息传递不同于紧密耦合的技术,比如远程方法调用(RMI),它需要应用程序知道远程应用程序的方法。

Interesting Posts