是否可以在没有服务代理的情况下构建 SOA?这有什么好的例子吗?

Is it possible to build a SOA without a service broker? Is there any good example of this?

我在 OSGi 中构建了一个应用程序,它提供了一个 REST API 用于从不同数据源读取值。然后我在我的应用程序中安装了几个模块来公开这些数据源。例如,一个模块从数据库公开读数,另一个从网站公开,另一个从 TCP/IP 设备读取,等等...

例如,如果我这样做: http://--------/listAllDataSources

如果我安装了 3 个模块,我会得到这样的结果:

{
   dataSources : [ 0, 1, 2 ]
}

那么如果我这样做: http://--------/read/1

我将从数据源编号 1 中获取读数。

{
    currentValue : "44.5"
}

所以我的架构包括:

[ External Apps]
        |
        |
      *Web*
        |
        |
[   REST API   ]
[M1][M2]....[Mn]

这算作 SOA 吗?

此外,如您所见,我没有使用任何服务代理。这会使我的应用程序不是 SOA 吗?

谢谢!

SOA 是一个抽象概念,类似于 3 层架构,可以应用于不同的级别。

如果您将 "External Apps" 视为系统的一部分,那么这些应用程序是服务消费者,而“[Rest API] with [M1]..[Mn]”是服务提供者。通信是通过 http 进行的。这就是 SOA。

如果您的系统范围只是“[Rest API] with [M1]..[Mn]”那么您仍然有消费者 - [Rest API](这也是提供者外部服务)和提供者 [M1]..[Mn]。

这个模块中的每一个都是一个服务,所以我认为这个设计是一个非常简单的 SOA。 Service broker 工作由 OSGI 运行时完成,通信协议可以只是 Java 方法调用 - 然而它可以简单地由 ECF 替换以跨不同的 JVM 分发模块,然后通信协议取决于 ECF 中的配置。

我认为你在这里混淆了概念,PedroD。您可以详细阅读术语 SOA 指的是什么 here。 (我故意不链接到维基百科文章,这绝对是可怕的和误导性的)。

您的应用程序是为公开功能而构建的,因此可以说它可以是 SOA 的一部分,但它本身并不是 SOA。

SOA是指支持面向服务的架构风格。它帮助组织以面向服务的方式集成和开发其系统。 SOA 是一种比您拥有的范例更广泛的范例,它大大超出了单个应用程序的上下文 - 例如它建立了内部企业指南、治理流程、跨多个业务领域的服务清单构建和服务编排,以使组织能够非常快速地实施业务流程,从而缩短上市时间。

当然,SOA 有发展的层次。您可能还没有适当的流程,或者您可能没有使用消息代理,可以说您仍在努力实现完全面向服务的体系结构。但为了实现 SOA,您必须至少拥有某种中间件层,这样您就可以避免点对点集成,并至少进行简单的服务组合。

我会说您的应用程序是在考虑集成和面向服务的情况下构建的,但它本身并不是 SOA。

注意:如果您希望以借鉴 SOA 的许多概念的方式在内部组织您的应用程序,您可能需要查看 Microservice Architecture。其实对我来说,你的架构更像微服务