【问题标题】:What is the difference between Java RMI and JMS?Java RMI 和 JMS 有什么区别?
【发布时间】:2010-04-05 00:39:26
【问题描述】:

在用 Java 设计分布式应用程序时,似乎有一些技术可以解决相同类型的问题。我已经简要了解了Java Remote Method InvocationJava Message Service,但很难真正看出区别。 Java RMI 似乎比 JMS 耦合更紧密,因为 JMS 使用异步通信,但除此之外我看不出有什么大的不同。

  • 它们有什么区别?
  • 其中一个是否比另一个新?
  • 哪一种在企业中比较常见/流行?
  • 它们之间有什么优势?
  • 什么时候比另一个更受欢迎?
  • 它们在实施难度上是否有很大差异?

我也认为 Web ServicesCORBA 解决了同样的问题。

【问题讨论】:

  • 这些听起来像是面试问题,因为您似乎将两个听起来相似但对于任何理解它们的人都应该被认为非常不同的术语混为一谈。
  • 他们没有“解决同样的问题”。

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


【解决方案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)而有些则没有。

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

    【讨论】:

    • JMS a 既不是可靠的消息传递子系统,也不是 MQSeries 的替代品。它是一个消息传递 API,可以与许多其他消息传递系统对话 MQSeries。
    • @mrjoltcola : 嗨,你能看看stackoverflow.com/questions/29683209/…
    猜你喜欢
    • 2019-08-25
    • 2021-10-12
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2013-06-24
    相关资源
    最近更新 更多