生產就緒特性

如果您正在對此處描述的 應用模組檢測 應用自定義配置,則需要將這些配置移動到您的生產原始碼中(如果尚未存在),以確保此處描述的特效能夠考慮這些配置。

Spring Modulith 支援將系統的架構資訊作為 Spring Boot actuator 端點公開,並透過捕獲指標和跟蹤來觀察應用模組之間的互動。由於生產就緒應用很可能需要這兩者,因此啟用這些功能最便捷的方法是使用 Spring Modulith Insight starter,如下所示

使用 Spring Modulith Insight starter
  • Maven

  • Gradle

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

這將包含 actuator 和可觀測性支援,以及 Spring Boot 用於 actuator 通用支援的啟動器。請注意,您仍然需要新增額外的依賴項,以便將您的應用連線到 Zipkin、Wavefront 等監控工具,通常透過 OpenTelemetry 或 Brave 進行。有關更多資訊,請查閱 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.3.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.3.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://:8080/actuator

{
  "_links": {
    "self": {
      "href": "https://:8080/actuator",
      "templated": false
    },
    "health-path": {
      "href": "https://:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "https://:8080/actuator/health",
      "templated": false
    },
    "modulith": { (1)
      "href": "https://: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 spans,最終形成可以在 Zipkin 等工具中視覺化的跟蹤。要啟用Instrumentation(插裝),請將以下執行時依賴項新增到您的專案

使用 Spring Modulith 可觀測性支援
  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-observability</artifactId>
  <version>1.3.5</version>
  <scope>runtime</scope>
</dependency>
dependencies {
  runtimeOnly 'org.springframework.modulith:spring-modulith-observability:1.3.5'
}
您需要根據您希望將可觀測性元資料匯入的工具配置額外的基礎設施依賴項。詳情請查閱 Spring Boot 文件中關於您的設定需要包含哪些依賴項的 相應章節

這將導致所有屬於應用模組 API 的 Spring 元件都被一個 Aspect 修飾,該 Aspect 將攔截方法呼叫併為其建立 Micrometer spans。示例呼叫跟蹤如下圖所示

observability
圖 1. 示例模組呼叫跟蹤

在這個特定的案例中,觸發支付改變了訂單的狀態,這隨後觸發了一個訂單完成事件。該事件被引擎非同步接收,該引擎觸發訂單的另一次狀態變更,工作幾秒鐘後依次觸發訂單的最終狀態變更。