生产就绪特性

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.5</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-starter-insight:1.2.5'
}

这将包含 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.5</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.5'
}

<!-- 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`。

模块排列示例如下所示:

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

观察应用程序模块

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

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

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-observability</artifactId>
  <version>1.2.5</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-observability:1.2.5'
}
您必须根据要将可观察性元数据传入的工具配置其他基础设施依赖项。有关详细信息,请查看相应的 Spring Boot 文档,了解要为您的设置包含哪些依赖项。

这将导致应用程序模块 API 的所有 Spring 组件都使用一个方面进行装饰,该方面将拦截调用并为它们创建 Micrometer span。下面可以看到一个示例调用跟踪:

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

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