1

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

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

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

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

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

4

1 回答 1

2

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

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

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

  • 您的请求将不太容易出现与服务相关的错误、服务可用性方面的短暂问题等,同时仍保留执行请求/回复样式调用的能力(这对于 SOAP 的 RPC 式性质很常见)。

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

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

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

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

于 2012-10-23T23:21:02.240 回答