生产就绪功能

Spring Modulith 提供支持,将系统架构信息作为 Spring Boot Actuator 端点公开,并通过捕获指标和跟踪来观察应用程序模块之间的交互。由于生产就绪的应用程序可能需要两者,因此激活这些功能的最便捷方式是使用 Spring Modulith Insight 启动器,如下所示

使用 Spring Modulith Insight 启动器
  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-starter-insight</artifactId>
  <version>1.2.0</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-starter-insight:1.2.0'
}

这将包括 Actuator 和可观察性支持,以及 Spring Boot 的 Actuator 启动,以提供对 Actuator 的通用支持。请注意,您仍然需要添加其他依赖项,以将您的应用程序连接到您的监控工具,例如 ZipkinWavefront 等,通常通过 OpenTelemetryBrave。有关此方面的更多信息,请参阅 Spring Boot 参考文档的 相应部分

应用程序模块 Actuator

应用程序模块结构可以作为 Spring Boot Actuator 公开。要启用 Actuator,请将 spring-modulith-actuator 依赖项添加到项目中

使用 Spring Modulith Actuator 支持
  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-actuator</artifactId>
  <version>1.2.0</version>
  <scope>runtime</scope>
</dependency>

<!-- Spring Boot actuator starter required to enable actuators in general -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <version>…</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-actuator:1.2.0'
}

<!-- Spring Boot actuator starter required to enable actuators in general -->
dependencies {
  runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator'
}

运行应用程序现在将公开一个 modulith Actuator 资源

访问 Actuator HTTP 资源
GET https://127.0.0.1:8080/actuator

{
  "_links": {
    "self": {
      "href": "https://127.0.0.1:8080/actuator",
      "templated": false
    },
    "health-path": {
      "href": "https://127.0.0.1:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "https://127.0.0.1:8080/actuator/health",
      "templated": false
    },
    "modulith": { (1)
      "href": "https://127.0.0.1:8080/actuator/modulith",
      "templated": false
    }
  }
}
1 广告的 modulith Actuator 资源。

modulith 资源遵循以下结构

表 1. 应用程序模块 Actuator 的 JSON 结构
JSONPath 描述

$.{moduleName}

应用程序模块的技术名称。dependencies.target 中模块引用的目标。

$.{moduleName}.displayName

应用程序模块的人类可读名称。

$.{moduleName}.basePackage

应用程序模块的基包。

$.{moduleName}.dependencies[]

应用程序模块的所有传出依赖项

$.{moduleName}.dependencies[].target

所依赖的应用程序模块的名称。对 {moduleName} 的引用。

$.{moduleName}.dependencies[].types[]

对目标模块的依赖项类型。可以是 DEFAULT(简单类型依赖项)、USES_COMPONENT(Spring Bean 依赖项)或 EVENT_LISTENER

模块排列的一个示例如下所示

应用程序模块执行器的示例响应
{
  "a": {
    "basePackage": "example.a",
    "displayName": "A",
    "dependencies": []
  },
  "b": {
    "basePackage": "example.b",
    "displayName": "B",
    "dependencies": [ {
      "target": "a",
      "types": [ "EVENT_LISTENER", "USES_COMPONENT" ]
    } ]
  }
}

观察应用程序模块

可以拦截应用程序模块之间的交互以创建 Micrometer 跨度,最终将其包含在您可以在诸如 Zipkin 之类的工具中可视化的跟踪中。要激活检测,请将以下运行时依赖项添加到您的项目中

使用 Spring Modulith 可观察性支持
  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-observability</artifactId>
  <version>1.2.0</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-observability:1.2.0'
}
您将需要根据您想要将可观察性元数据管道化的工具配置额外的基础设施依赖项。有关详细信息,请查看相应的 Spring Boot 文档,了解要包含在您的设置中的依赖项。

这将导致应用程序模块 API 的所有 Spring 组件都使用一个方面进行装饰,该方面将拦截调用并为其创建 Micrometer 跨度。下面显示了一个示例调用跟踪

observability
图 1. 示例模块调用跟踪

在这种特定情况下,触发付款会更改订单的状态,然后导致触发订单完成事件。引擎异步接收此事件,该引擎触发订单上的另一个状态更改,运行几秒钟,然后依次触发订单上的最终状态更改。