JMS和Web服务相比有哪些明显的优势?
(Web服务膨胀吗?JMS是否更适合提供接口?)
JMS要求您拥有JMS提供程序,实现MessageListener接口以处理消息的Java类,以及知道如何连接到JMS队列的客户端。JMS意味着异步处理-客户端发送消息并不一定等待响应。JMS可用于点对点队列或发布/订阅。
“服务”是一个流动的术语。我认为服务是一个组件,位于网络上并广告合同:“如果您向我发送X,我将为您执行此任务并返回Y。”
分布式组件已经存在很长时间了。每个组件使用不同的协议进行通信(例如COM,Corba,RMI等),并以不同的方式公开其契约。
Web服务是分布式服务的最新趋势。它们使用HTTP作为协议,并且可以与任何能够通过TCP/IP连接并发出HTTP请求的客户端进行互操作。
您可以使用SOAP或RPC-XML或REST或“先有契约”风格,但是使用HTTP作为其协议的分布式组件的基本思想仍然存在。
如果您接受所有这些内容,Web服务通常是同步调用。它们不必臃肿,但是您可以使用任何样式或语言编写糟糕的组件。
您可以通过首先设计请求和响应来开始设计任何分布式组件。在此基础上,根据您想要拥有的客户端类型以及通信是同步还是异步,选择JMS或Web服务。
基于消息的系统,包括JMS,提供了与另一端“时间上解耦”的能力。可以在另一端不可用的情况下发送消息。
所有其他常见的A2A方法都需要合作伙伴能够立即响应,这要求他们能够处理峰值负载,并且几乎没有分散处理的能力。
我认为最大的区别在于JMS是面向消息的,而不是面向RPC的。大多数JMS提供商都支持高级协议,可以执行重试、防止重复和支持事务。
虽然有很多应用程序并不需要这些功能,但在需要它们的情况下,如果要在RPC机制之上自己构建这些功能,那么会变得非常复杂、昂贵且容易出错。
Web服务是面向服务的体系结构(SOA)的一种实现。SOA有三个参与方:提供者、代理和请求者,它们之间松散耦合。提供者提供了一个业务服务,表示特定的实现,这对于请求者来说并不直接可见。请求者从代理处学习信息结构,以便向提供者发送和接收信息,并使用什么协议访问该服务。请求者不会知道提供者如何实现业务服务。
Web服务被定义为请求者和提供者之间所需的业务接口,而不是所有业务请求的通用管道。有几个变量可以表征Web服务,包括:
JMS是一种异步消息传递接口。您还可以使用JMS访问分布在异构系统中的业务逻辑。具有基于消息的接口可以实现以下功能:
点对点和发布/订阅机制。基于消息的框架可以向其他应用程序推送信息,而无需明确请求。同一信息可以并行传递给许多订阅者。
节奏独立性。 JMS框架以异步模式运行,但也提供了模拟同步请求/响应模式的能力。这允许源和目标系统同时工作,而不必等待彼此。
保证信息传递。JMS框架可以在事务模式下管理消息,并确保消息传递(但不能保证及时传递)。
异构框架之间的互操作性。源和目标应用程序可以在异构环境中操作,而不必处理与各自框架相关的通信和执行问题。
使交流更加流畅。切换到消息模式允许更细粒度的信息交换。
从我所做的几个方面来看,我发现了以下区别: JMS - 我被绑定到JMS提供商-但是我可以选择不同的实现类型(发布/订阅,点对点) Web Service - 更容易处理/设计 - 但它更像是盒子之间的直接通信。有许多工具可用于开发 - 并且具有干净的接口(WSDL),因此实现者和调用者可以独立。
使用哪个取决于问题是什么。
想回复dyffymo的帖子,但还没有足够的声望。
引用你的答案:
“Web服务是分布式服务的最新趋势。它们使用HTTP作为协议,并且可以与任何能够通过TCP/IP连接并发出HTTP请求的客户端进行互操作。
您可以使用SOAP或RPC-XML或REST或“合同优先”样式,但分布式组件使用HTTP作为其协议的基本思想仍然存在。”
这完全取决于您的需求,您将使用哪些框架以及您的应用程序环境和行为。如果您可以概述一下这些内容,那么您就可以得到一个明确的答案。
这就像比较卡车和轿车一样,您必须知道它将用于什么以及在哪条路上,才能决定哪个更好。