【问题标题】:Best practice to integrate web services (with Camel)集成 Web 服务的最佳实践(使用 Camel)
【发布时间】:2012-10-08 14:36:56
【问题描述】:

我有以下情况。一些服务主要通过 SOAP 接口提供它们的功能。有一个模块想要使用此功能以集成到网站中。这样做的最佳做法是什么?

服务的功能可能会发生变化。因此,每个单独的函数/方法都应该是“可重新路由的”。 Web 服务可能托管在不同的机器上。

将所有 Web 服务映射到 JMS 队列是否合理(我的第一个想法)?网站模块将只与 JMS 对话。路由器会将所有传入的 JMS 消息路由到不同的 Web 服务(或其他地方)。

或者:可能有一个专门的 Web 服务,它集成了所有功能,供该网站专门使用?这里的优点是参数和返回值是类型化的。

你有什么建议?还有什么更好的方法?

【问题讨论】:

    标签: web-services jms integration apache-camel


    【解决方案1】:

    如果我理解正确,您的目标是为您的 webapp 模块提供一个同质接口、一个连贯的 API,为多个远程接口(主要是 SOAP 接口)提供外观。

    关于您提到的 JMS 方法 - 这似乎是合理的,但是:

    • 而不是许多队列,我宁愿在队列之后立即使用带有基于 Camel 内容的路由器的单个 JMS 目标(或请求/回复模式的两个队列),这将使事情“可重新路由”并隔离服务中的 Web 模块发生变化。

    • 1234563 .
    • 我会在适用的任何地方使用单向样式调用(以提高可靠性和反应性)。

    • 您不必担心缺少类型,WSDL+SOAP 似乎强制执行强类型,但这是由自动生成的存根驱动的错觉。您仍然需要来回整理数据。 我会使用 JSON 而不是 SOAP,因为它比 XML 更干净且冗余更少(可能更快,但这通常无关紧要)。 Jackson 是一个非常高效的 JSON 库,并且已经在 Camel 发行版中得到支持。 JMS ObjectMessage 是一个很大的NO (a good article on some of the ObjectMessage pitfalls )

    单服务方法似乎是将 web 模块与服务层分离的好方法。它缺乏 JMS 方法的灵活性和容错性,但似乎更容易实现。

    如果有许多呼叫可以以单向方式结束,我会说使用 JMS 并在队列之后重新路由消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      相关资源
      最近更新 更多