JMS和Web服务之间的区别

20

我需要开发一个可以接受订单并返回确认的系统。订单可以来自于Java或非Java客户端。

不确定是选择Web服务实现还是JMS。

有什么建议吗...

4个回答

24

JMS是一个API,它抽象了消息中间件,例如ActiveMQ或IBM MQSeries。

消息中间件具有存储转发范式和异步消息传递,而Web服务倾向于推广同步过程调用范式。在分布式系统中,许多事情可能出错,异步处理问题往往更容易将注意力集中在当系统的一部分不可用或性能较差时需要做的事情上,并且处理这些问题所需的代码通常要简单得多。

如果您有多个服务器侦听相同的队列,则聚类部分变得非常简单,此时并行性和负载平衡是免费的。

就我个人而言,我发现JMS比Web服务更易于使用、更强大和可靠,但消息中间件必须支持您想要使用的所有平台。如果需要互相通信的所有组件都在您的控制下,我会认真考虑使用具有JMS接口的消息中间件。

如果对方是外部方,则可能使用Web服务,并在这种情况下,您可以考虑使用薄层将外部Web服务转换为内部消息传递基础架构,以便仍然拥有大部分优势。

如果只是“在Web应用程序上添加远程API”,那么当然不需要设置异步消息传递。


你能进一步解释一下这个“薄层”是什么吗?有没有例子? - Harvey Lin

5

5
您可以根据互操作性、规模、分发和集成要求使用两种方法。利用SOAP、XML RPC和REST的Web服务方法在协议上使用HTTP,因此具有相当高的互操作性。从服务端来看,您可以接收Web服务请求,然后将其编组为消息。然后可以将该消息传递到消息总线。 JMS是与消息总线进行接口的合理API,我发现Active/MQ在这方面非常好。 Active/MQ支持多种语言的JMS。使用消息传递,您可以利用请求/响应企业集成模式接收响应,并通过Web服务返回它们。但是,请考虑提供即时反馈是否有利于处理订单,而不是反馈已接收订单的事实;您可能不需要实现请求/响应来确认已接收订单。消息传递的好处可以在此处找到:http://www.eaipatterns.com/Messaging.html 你甚至可以查看Apache Camel来简化高度可扩展和分布式服务层的开发。

请问您能否就这个问题提供一些指导意见。https://dev59.com/oHjZa4cB1Zd3GeqPgJwA 感谢您的时间。 - Kumar

0
为了实现互操作性,请使用 Web 服务。JMS 在 Java 以外的世界中很少使用。

1
我一直认为JMS背后的理念是能够排队消息,而Web服务则像API调用和直接。我还建议您考虑将REST作为实现方式。 - Scott Warren
JMS 的定义是仅在 Java 世界中使用,因为它只是一个 API。但它完全能够与非 Java 系统通信,这正是它存在的意义。 - skaffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接