Production-ready Features

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

Using the Spring Modulith Insight starter
  • Maven

  • Gradle

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

这将包括执行器和可观察性支持以及 Spring Boot 的执行器启动,以提供对执行器的常规支持。请注意,你仍然必须添加其他依赖性,以将应用程序连接到监控工具,例如 ZipkinWavefront 等,通常通过 OpenTelemetryBrave 完成。请参见 Spring Boot 参考文档中的 the corresponding section 获取更多信息。

[id="observability.actuator"]Application Module Actuator

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

Using the Spring Modulith actuator support
  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-actuator</artifactId>
  <version>{projectVersion}</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:{projectVersion}'
}

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

现在,运行应用程序将公开一个 modulith 执行器资源:

Accessing the actuator HTTP resource
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 modulith 执行器资源已通告。

modulith 资源遵守以下结构:

Table 1. The JSON structure of the application modules actuator
JSONPath Description

$.{moduleName}

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

$.{moduleName}.displayName

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

$.{moduleName}.basePackage

应用程序模块的基本程序包。

$.{moduleName}.dependencies[]

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

$.{moduleName}.dependencies[].target

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

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

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

一个示例模块安排看起来如下:

An example response for the application modules actuator
{
  "a": {
    "basePackage": "example.a",
    "displayName": "A",
    "dependencies": []
  },
  "b": {
    "basePackage": "example.b",
    "displayName": "B",
    "dependencies": [ {
      "target": "a",
      "types": [ "EVENT_LISTENER", "USES_COMPONENT" ]
    } ]
  }
}

[id="observability"]Observing Application Modules

应用程序模块之间的交互可以进行拦截,以创建微米范围,最终可在像 Zipkin 这样的工具中可视化中出现你追踪的线。为激活检测项,将以下运行时依赖性添加到项目:

Using the Spring Modulith observability support
  • Maven

  • Gradle

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

您必须配置额外的基础设施依赖项,具体取决于您希望从中提取可观察元数据的工具。有关详细信息,请查看相应的 Spring Boot documentation ,了解要包含在您的设置中的依赖项。

这将使应用程序模块 API 的一部分的所有 Spring 组件使用切面进行修饰,该切面会拦截调用并为它们创建 Micrometer span。示例调用跟踪可在下面看到:

observability
Figure 1. A sample module invocation trace

在这种特定情况下,触发支付会更改订单的状态,然后导致触发订单完成事件。发动机异步拾取此事件,从而触发订单上的另一个状态更改,持续几秒钟,然后依次触发订单的最终状态更改。