对于最新的稳定版本,请使用 Spring Modulith 1.3.0spring-doc.cn

生产就绪功能

Spring Modulith 支持将有关系统的架构信息公开为 Spring Boot 执行器端点,以及通过捕获指标和跟踪来观察应用程序模块之间的交互。 由于生产就绪的应用程序可能需要两者,因此激活这些功能的最便捷方法是使用 Spring Modulith Insight Starters,如下所示:spring-doc.cn

使用 Spring Modulith Insight 起动器
<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-starter-insight</artifactId>
  <version>1.1.11</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-starter-insight:1.1.11'
}

这将包括 actuator 和 observability 支持以及 Spring Boot 的 actuator startup,以提供对 actuator 的一般支持。 请注意,您仍然需要添加更多依赖项,才能将应用程序连接到监控工具,例如 ZipkinWavefront 等,通常通过 OpenTelemetryBrave。 在 Spring Boot 参考文档的相应部分中找到更多信息。spring-doc.cn

应用模块 执行器

应用程序模块结构可以作为 Spring Boot 执行器公开。 要启用 Actuator,请将依赖项添加到项目中:spring-modulith-actuatorspring-doc.cn

使用 Spring Modulith 促动器支架
<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-actuator</artifactId>
  <version>1.1.11</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.1.11'
}

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

现在运行应用程序将公开一个 actuator 资源:modulithspring-doc.cn

访问 actuator HTTP 资源
GET http://localhost:8080/actuator

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "modulith": { (1)
      "href": "http://localhost:8080/actuator/modulith",
      "templated": false
    }
  }
}
1 通告的 actuator 资源。modulith

资源遵循以下结构:modulithspring-doc.cn

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

$.{moduleName}spring-doc.cn

应用程序模块的技术名称。中模块引用的目标。dependencies.targetspring-doc.cn

$.{moduleName}.displayNamespring-doc.cn

应用程序模块的可读名称。spring-doc.cn

$.{moduleName}.basePackagespring-doc.cn

应用程序模块的基础包。spring-doc.cn

$.{moduleName}.dependencies[]spring-doc.cn

应用程序模块的所有传出依赖项spring-doc.cn

$.{moduleName}.dependencies[].targetspring-doc.cn

应用程序模块所依赖的名称。对 .{moduleName}spring-doc.cn

$.{moduleName}.dependencies[].types[]spring-doc.cn

目标模块的依赖项类型。可以是 (simple type dependency)、(Spring bean dependency) 或 .DEFAULTUSES_COMPONENTEVENT_LISTENERspring-doc.cn

示例模块排列如下所示:spring-doc.cn

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

观察应用程序模块

应用程序模块之间的交互可以被拦截以创建 Micrometer 跨度,最终形成您可以在 Zipkin 等工具中可视化的跟踪。 要激活检测,请将以下运行时依赖项添加到您的项目中:spring-doc.cn

使用 Spring Modulith 可观测性支持
<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-observability</artifactId>
  <version>1.1.11</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-observability:1.1.11'
}
您必须配置额外的基础设施依赖项,具体取决于要通过管道传输可观测性元数据的工具。 有关详细信息,请查看相应的 Spring Boot 文档,了解你的设置要包含哪些依赖项。

这将导致作为应用程序模块 API 一部分的所有 Spring 组件都装饰有一个方面,该方面将拦截调用并为它们创建千分尺跨度。 如下所示:spring-doc.cn

可观察性
图 1.示例模块调用跟踪

在这种特殊情况下,触发付款会更改订单的状态,从而导致触发订单完成事件。 这由引擎异步获取,该引擎触发订单上的另一个状态更改,工作几秒钟,然后依次触发订单的最终状态更改。spring-doc.cn