【发布时间】:2011-04-07 03:50:10
【问题描述】:
我需要开发一个接受订单和退货确认的系统。订单可能来自 java 或非 java 客户端。
不确定是选择 Web 服务实现还是 JMS。
任何建议...
【问题讨论】:
标签: web-services jms
我需要开发一个接受订单和退货确认的系统。订单可能来自 java 或非 java 客户端。
不确定是选择 Web 服务实现还是 JMS。
任何建议...
【问题讨论】:
标签: web-services jms
JMS 是一种抽象消息传递中间件的 API,例如 ActiveMQ 或 IBM MQSeries。
消息中间件具有存储转发范式和异步消息传递,而 Web 服务倾向于促进同步过程调用范式。在很多可能出错的分布式系统中,当系统的一部分不可用或性能不佳时,异步处理事情往往会更好地将注意力集中在你需要做的事情上,而需要处理的代码往往是简单得多。
如果您有多个服务器在同一个队列上侦听,则集群部分变得微不足道,在这种情况下,并行性和负载平衡是免费的。
就我个人而言,我发现 JMS 比 Web 服务更易于使用、更健壮和可靠,但消息传递中间件必须支持您想要使用的所有平台。如果所有需要相互通信的组件都在你的控制之下,我会认真考虑一个带有 JMS 接口的消息中间件。
如果对方是外部的,那么可能是 Web 服务规则,在这种情况下,您可以考虑使用薄层将外部 Web 服务转换为内部消息传递基础架构,这样您仍然拥有大部分优势。
如果它“只是在 web 应用上添加一个远程 API”,那么设置异步消息当然也不需要支付任何费用。
【讨论】:
您可以根据互操作性、规模、分布和集成要求同时使用这两种方法。
鉴于使用 HTTP 作为协议,利用 SOAP、XML RPC 和 REST 的 Web 服务方法提供了相当可互操作的东西。从服务端,您可能会收到一个 Web 服务请求,然后将其编组为一条消息。然后可以将您的消息传递到消息总线。
JMS 是一个与消息总线接口的合理 API,我发现 Active/MQ 在这里非常好。 Active/MQ 支持跨多种语言的 JMS。
通过消息传递,您可以利用请求/回复企业集成模式来接收响应并通过您的 Web 服务返回它们。但是,请考虑提供有关订单是否已处理的即时反馈与反馈已收到订单的事实的优点;您可能不需要执行请求/回复来确认已收到订单。
消息的好处可以在这里找到:http://www.eaipatterns.com/Messaging.html
您甚至可能想查看Apache Camel 以简化高度可扩展和分布式服务层的开发。
【讨论】:
检查链接
difference between using JMS/Messaging Middleware versus Web services
Messaging, JMS and Web Services
Choosing among JCA, JMS, and Web services
因此,如果通信应用程序是基于 Java 的,则使用 JMS,如果可能不同,那么 Web 服务......这就是我所遵循的。
【讨论】:
为了互操作性,请使用 Web 服务。 JMS 在 Java 世界之外很少使用。
【讨论】: