不用 Spring 运行
Wow 的运行时不依赖 Spring:内核、运行时和后端都是纯 Kotlin,Spring Boot 只是组合它们的一种宿主。在 10.0 中,它是唯一受支持的宿主。本页说明没有它时什么能运行、什么不能。
不用 Spring
- 领域模块。 组成服务的 api 和 domain 模块依赖
wow-api和wow-kernel,编译器为它们生成的模型不使用任何 Spring 类型。领域 jar 可以与任何 JVM 应用共享。 - 它的测试。
wow-test的aggregateSpec、sagaSpec和处理器 spec 在内存存储上、在普通的 JUnit 测试中运行生成的模型(测试领域代码)。 - 调用其他服务。
WowClient基于 JDK 的HttpClient,在类路径上没有 Spring 的情况下,向*-apijar 中指明的对端发送命令,并通过 HTTP 读取它们的快照、事件、数据集和状态:
kotlin
val client = WowClient.builder()
.endpoints(EndpointResolver.of(emptyMap(), mapOf("ordering" to URI.create("http://ordering:9090"))))
.service(ServiceCredential.bearer(token))
.build()
client.commands.of(caller).wait(SubmitOrder(items), OrderingContract.Order.ref(tenant, orderId))Java 代码通过 JavaCommandClient.of(client.commands) 和 JavaQueryApi.of(client.queries) 使用它(调用其他服务)。
仍然需要宿主的部分
提供服务,即它的路由、带订阅、定时器和集群的节点,以及它的读取侧,是许多部分的组合;在 10.0 中,组合它们的类是内部 API(@InternalWowApi):服务节点、查询引擎,以及提供状态读取和查询的读取门面。应用不选择使用内部 API 就无法用它们构建节点,而任何版本都不承诺保留内部 API(API 级别)。HTTP 路由 wow-http 构建在 Spring WebFlux 之上。
所以服务运行在 Spring Boot 宿主上(在 Spring Boot 上运行),由它把配置映射到这些部分,并负责它们的生命周期。供其他宿主使用的公开组合 API 可能会在之后的某个 10.x 版本中提供;在此之前,无法使用 Spring Boot 的应用把它的领域和客户端留在 Wow 上,并通过旁边一个它自己的 Spring Boot 服务来提供服务。