diff --git a/README.md b/README.md index a381985f..89895f60 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ | 类别 | 选型 | |---|---| | 语言 | Java **25** | -| 框架 | Spring Boot 3.4.x | -| 网络 | Netty 4.1 | +| 框架 | Spring Boot 3.5.3 | +| 网络 | Netty 4.2.9.Final | | 并发 | Disruptor 4 + 虚拟线程 + `StructuredTaskScope` | | 消息队列 | **Kafka**(vin 分区,保证单车有序) | | 线上消息格式 | **Protobuf**,调试走 JSON | -| MQTT 客户端 | HiveMQ MQTT Client | +| MQTT 客户端 | Eclipse Paho 1.2.5 | | 会话缓存 | Redis 生产索引 + Caffeine 内存降级 | | 熔断/限流 | Resilience4j 2 | | 可观测 | Micrometer + Prometheus + OpenTelemetry | @@ -60,8 +60,8 @@ lingniu-vehicle-ingest/ │ ├── gb32960-ingest-app/ GB32960 TCP 接入 + Kafka 投递 │ ├── jt808-ingest-app/ JT808 TCP 接入 + Kafka 投递 │ ├── yutong-mqtt-app/ 宇通 MQTT 接入 + Kafka 投递 -│ ├── vehicle-history-app/ 历史查询 + 原始归档索引消费 -│ └── vehicle-analytics-app/ 车辆状态/日统计消费 +│ ├── vehicle-history-app/ TDengine 历史查询 + RAW JSON +│ └── vehicle-analytics-app/ JT808 每日里程指标消费 ├── docs/ 架构文档、模块图、实施计划 └── reference/ 参考资料 ``` diff --git a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/MavenModuleProfileTest.java b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/MavenModuleProfileTest.java index c47a567a..90ba5010 100644 --- a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/MavenModuleProfileTest.java +++ b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/MavenModuleProfileTest.java @@ -43,12 +43,38 @@ class MavenModuleProfileTest { "modules/apps/xinda-push-app"); } + @Test + void readmeMatchesCurrentRuntimeVersionsAndSplitAppResponsibilities() throws Exception { + Document pom = rootPom(); + String readme = Files.readString(repositoryRoot().resolve("README.md")); + + assertThat(readme) + .contains("Spring Boot " + projectProperty(pom, "spring-boot.version")) + .contains("Netty " + projectProperty(pom, "netty.version")) + .contains("Eclipse Paho " + projectProperty(pom, "paho-mqtt.version")) + .contains("vehicle-history-app/ TDengine 历史查询 + RAW JSON") + .contains("vehicle-analytics-app/ JT808 每日里程指标消费") + .doesNotContain("Spring Boot 3.4") + .doesNotContain("Netty 4.1") + .doesNotContain("HiveMQ MQTT Client") + .doesNotContain("车辆状态/日统计消费"); + } + private static Document rootPom() throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); return factory.newDocumentBuilder().parse(Files.newInputStream(repositoryRoot().resolve("pom.xml"))); } + private static String projectProperty(Document pom, String name) { + Element properties = firstDirectChild(pom.getDocumentElement(), "properties"); + Element property = firstDirectChild(properties, name); + if (property == null) { + throw new IllegalArgumentException("project property not found: " + name); + } + return property.getTextContent().trim(); + } + private static List defaultModules(Document pom) { Element project = pom.getDocumentElement(); return directModules(firstDirectChild(project, "modules"));