web-services - 服务可以在其代码中调用另一个服务吗?

标签 web-services service architecture soa

以下是与 SOA 相关的演示幻灯片中提到的一点,它使我对服务编排和服务编排的概念感到困惑。要启用服务编排,Web 服务是否应该能够调用另一个 Web 服务?

SOA builds applications out of software services. Services comprise intrinsically
unassociated, loosely coupled units of functionality that have no calls to
each other embedded in them.

最佳答案

理论上,服务可以做任何它需要做的事情来完成它的工作。因此,似乎没有充分的理由禁止使用第二项服务来完成您的工作。为什么要重新发明轮子?

在实践中,问题更为复杂。如果您开始在您自己的 Web 服务器上调用其他服务,那么您最终会耗尽它的资源。充其量,当您的 Web 服务服务器自行运行时,“真正的”客户端将不得不等待更长的时间才能得到答案。

另一个问题是递归循环:服务 A 调用 B 调用 C 调用 A 调用 B ...你明白了。一项服务的微小变化可以在没有任何人注意的情况下引入这样的循环,并且它可以在那里停留很长时间,直到它突然杀死你的服务器。

这就是为什么您应该在服务器内部的层次结构中构建微服务的原因(即在 Web 服务层之下 - 此 不会暴露给客户端 )。这些微服务可以以自上而下的方式相互使用(以避免循环)。单元测试然后确保它们正常运行。

最后,这种重用非常缓慢。每个 HTTP 请求都需要大量资源来创建、发送、解析和处理。直接调用内部方法可以快 10 - 10000 倍。

这些是单个服务器公开的服务不应通过“公共(public)客户端 API”相互重用的主要原因。

注意:有些 Web 服务通过使用现有服务来构建新服务。 IFTTT - "If This Then That"就是这样一只野兽。

关于web-services - 服务可以在其代码中调用另一个服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26099432/

相关文章:

java - 实现通用抽象 jaxrs 服务

c# - 由 WSDL.exe 生成的 Web 服务代理代码与 "Update Web Reference"- 我应该关心吗?

java - 无法关闭间隔服务

asp.net-mvc - 如何构建这个 ASP.NET n 层解决方案?

web-services - 使用并发用户测试 Web 服务的自动增量功能

java - 通过 Jersey 发布 JSON

Android:当我不使用 IPC 时,为什么要以虚拟容量使用服务?

java - 使用 Maven 构建 OSGI 声明式服务

architecture - 如何在 UML 事件图中可视化协作事件?

architecture - Backbone.js 架构 : routes or application state?