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