chore: document local archive storage only
This commit is contained in:
@@ -24,7 +24,7 @@
|
|||||||
| 会话索引 | Redis |
|
| 会话索引 | Redis |
|
||||||
| 熔断/限流 | Resilience4j 2 |
|
| 熔断/限流 | Resilience4j 2 |
|
||||||
| 可观测 | Micrometer + Prometheus |
|
| 可观测 | Micrometer + Prometheus |
|
||||||
| 冷存 | S3 / OSS / 本地 |
|
| 冷存 | 本地文件系统 |
|
||||||
| 构建 | Maven |
|
| 构建 | Maven |
|
||||||
|
|
||||||
## 模块划分
|
## 模块划分
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ flowchart TB
|
|||||||
|
|
||||||
subgraph sink["输出与明细存储 modules/sinks"]
|
subgraph sink["输出与明细存储 modules/sinks"]
|
||||||
kafka["sink-kafka<br/>VehicleEvent 到 Protobuf Envelope 到 Kafka"]
|
kafka["sink-kafka<br/>VehicleEvent 到 Protobuf Envelope 到 Kafka"]
|
||||||
archive["sink-archive<br/>RawArchive 到本地/S3/OSS 冷存"]
|
archive["sink-archive<br/>RawArchive 到本地文件系统冷存"]
|
||||||
tdengineStore["tdengine-history-store<br/>TDengine raw_frames + locations"]
|
tdengineStore["tdengine-history-store<br/>TDengine raw_frames + locations"]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -444,7 +444,7 @@ sequenceDiagram
|
|||||||
</div>
|
</div>
|
||||||
<div class="callout">
|
<div class="callout">
|
||||||
<strong>原始追溯:</strong>
|
<strong>原始追溯:</strong>
|
||||||
Dispatcher 为所有带 rawBytes 的 RawFrame 生成统一的 <code>rawArchiveKey</code>,业务事件 metadata 使用 <code>rawArchiveUri=archive://...</code> 指向同一份原始 bytes。归档文件的真实本地/S3/OSS 地址只属于 ArchiveStore,查询、导出和 Kafka Envelope 使用逻辑 URI 解耦存储实现。
|
Dispatcher 为所有带 rawBytes 的 RawFrame 生成统一的 <code>rawArchiveKey</code>,业务事件 metadata 使用 <code>rawArchiveUri=archive://...</code> 指向同一份原始 bytes。归档文件的真实本地路径只属于 ArchiveStore,查询、导出和 Kafka Envelope 使用逻辑 URI 解耦存储实现。
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -584,7 +584,7 @@ flowchart LR
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>modules/sinks/sink-archive</td>
|
<td>modules/sinks/sink-archive</td>
|
||||||
<td>原始报文冷存,当前有本地文件系统实现,后续可替换 S3/OSS;写入键与业务事件 metadata 中的 <code>rawArchiveKey</code> 保持一致。</td>
|
<td>原始报文冷存,当前为本地文件系统实现;写入键与业务事件 metadata 中的 <code>rawArchiveKey</code> 保持一致。</td>
|
||||||
<td>RawArchive 事件、附件流。</td>
|
<td>RawArchive 事件、附件流。</td>
|
||||||
<td>可回放原始文件、<code>archive://...</code> 逻辑引用。</td>
|
<td>可回放原始文件、<code>archive://...</code> 逻辑引用。</td>
|
||||||
<td><span class="tag amber">问题排查</span><span class="tag amber">合规留痕</span></td>
|
<td><span class="tag amber">问题排查</span><span class="tag amber">合规留痕</span></td>
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ class MavenModuleProfileTest {
|
|||||||
.contains("Eclipse Paho " + projectProperty(pom, "paho-mqtt.version"))
|
.contains("Eclipse Paho " + projectProperty(pom, "paho-mqtt.version"))
|
||||||
.contains("session-core/ 设备会话 + 鉴权 + Token + Redis SessionStore")
|
.contains("session-core/ 设备会话 + 鉴权 + Token + Redis SessionStore")
|
||||||
.contains("| 事件流 | **Kafka**(唯一生产消息通道,vin 分区,保证单车有序) |")
|
.contains("| 事件流 | **Kafka**(唯一生产消息通道,vin 分区,保证单车有序) |")
|
||||||
|
.contains("| 冷存 | 本地文件系统 |")
|
||||||
.contains("| 构建 | Maven |")
|
.contains("| 构建 | Maven |")
|
||||||
.contains("protocol-jt1078/ JT/T 1078(optional-command-gateway profile")
|
.contains("protocol-jt1078/ JT/T 1078(optional-command-gateway profile")
|
||||||
.contains("protocol-jsatl12/ 苏标主动安全报警附件(optional-attachments profile)")
|
.contains("protocol-jsatl12/ 苏标主动安全报警附件(optional-attachments profile)")
|
||||||
@@ -210,6 +211,7 @@ class MavenModuleProfileTest {
|
|||||||
.doesNotContain("其他 MQ 后端")
|
.doesNotContain("其他 MQ 后端")
|
||||||
.doesNotContain("Spotless")
|
.doesNotContain("Spotless")
|
||||||
.doesNotContain("ArchUnit")
|
.doesNotContain("ArchUnit")
|
||||||
|
.doesNotContain("S3 / OSS / 本地")
|
||||||
.doesNotContain("mvn clean install -DskipTests")
|
.doesNotContain("mvn clean install -DskipTests")
|
||||||
.doesNotContain("-DskipTests")
|
.doesNotContain("-DskipTests")
|
||||||
.doesNotContain("Caffeine 内存降级")
|
.doesNotContain("Caffeine 内存降级")
|
||||||
@@ -224,6 +226,26 @@ class MavenModuleProfileTest {
|
|||||||
.doesNotContain("| 消息队列 |");
|
.doesNotContain("| 消息队列 |");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void archiveBuildSurfaceDocumentsLocalFilesystemOnly() throws Exception {
|
||||||
|
String archivePom = Files.readString(repositoryRoot().resolve("modules/sinks/sink-archive/pom.xml"));
|
||||||
|
String moduleDataFlow = Files.readString(repositoryRoot().resolve("docs/module-data-flow.html"));
|
||||||
|
|
||||||
|
assertThat(archivePom)
|
||||||
|
.contains("原始报文冷存:本地文件系统实现。")
|
||||||
|
.doesNotContain("S3/OSS")
|
||||||
|
.doesNotContain("MinIO")
|
||||||
|
.doesNotContain("software.amazon.awssdk")
|
||||||
|
.doesNotContain("com.aliyun.oss");
|
||||||
|
assertThat(moduleDataFlow)
|
||||||
|
.contains("sink-archive<br/>RawArchive 到本地文件系统冷存")
|
||||||
|
.contains("归档文件的真实本地路径只属于 ArchiveStore")
|
||||||
|
.contains("原始报文冷存,当前为本地文件系统实现")
|
||||||
|
.doesNotContain("本地/S3/OSS")
|
||||||
|
.doesNotContain("S3/OSS")
|
||||||
|
.doesNotContain("MinIO");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void yutongMqttBuildSurfaceUsesOnlyPahoClient() throws Exception {
|
void yutongMqttBuildSurfaceUsesOnlyPahoClient() throws Exception {
|
||||||
Document pom = rootPom();
|
Document pom = rootPom();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
</parent>
|
</parent>
|
||||||
<artifactId>sink-archive</artifactId>
|
<artifactId>sink-archive</artifactId>
|
||||||
<name>sink-archive</name>
|
<name>sink-archive</name>
|
||||||
<description>原始报文冷存:本地文件系统实现 + S3/OSS 扩展点。</description>
|
<description>原始报文冷存:本地文件系统实现。</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
Reference in New Issue
Block a user