roh*_*hit 2 java axon spring-boot
我正在运行三个不同的服务(A、B 和 C),并且所有服务都连接到 axonserver 4.3.3。除此之外,我还有一个 api 服务,其中包含所有事件,以便可以在所有服务之间共享。当一个事件被触发时(假设由服务 A 触发),其他服务(B 和 C)正在监听该事件,并且它们会做出相应的反应。
现在我也想共享查询,这样当一个服务(比如说A)想要一些属于另一个服务(比如说B)的信息时,它可以直接触发相应的查询,该查询将由服务B侦听并返回信息。
更新
我只是将查询添加到 common-api 服务并从服务 A 中触发它,如下所示:
queryGateway.query( findCourierByIdQuery, responseType):我得到了 queryhandler not found 异常queryGateway.subscriptionQuery( findCourierByIdQuery, initialResponseType, updateResponseType):我什么也没得到queryGateway.scatterGather( findCourierByIdQuery, responseType, timeout, timeUnit):我有一个空流当我从服务 B 本身触发 findCourierByIdQuery 时,查询处理程序被调用并且我得到了正确的响应。
我的观察是,只有当查询从同一组件(本例中为服务 B)触发时,查询处理程序才会被调用,如果我从其他组件(服务 A)触发查询,则不会被调用。
请注意,所有服务都独立运行在不同的主机和端口上,但连接到同一个 axonserver,并且 queryhandler 编写在服务 B 中。
所以基本上实现是这样的:
我认为这完全没问题!
Axon 使用三种类型的消息:命令、事件和查询。它们代表您的服务的 API。下游服务(在您的情况 B&C 中)可以发送命令、订阅事件或发送(并订阅)上游服务(在您的情况 A 中)的查询。简单来说,B&C 依赖于 A。如果可能的话,使这种依赖关系成为单向的(唯一的 B 依赖于 A,而不是相反)非常重要。
通常,您希望拥有anti-corruption layer component下游服务 (B&C) 的边缘。它可以将来自上游服务 (A) 的事件转换为它自己的命令,也可以将其自己的事件转换为上游服务 (A) 的命令。这是一个 Saga 或常规事件处理程序(处理器)。
如果您对查询感兴趣,那么您anti-corruption layer component将使用查询网关从上游服务 (A) 发出(订阅)查询,并希望以自动方式将响应转换为命令,类似于我提到的 Saga/事件处理程序。通常,这种通过查询 API 的集成并不是完全自动化的:从查询到命令的转换涉及用户。在这种情况下,服务 B(下游)正在使用(服务 A 的)查询响应来呈现用户可以从中发出下一个命令的视图(服务 B)
在下游系统中拥有反腐败层组件将使您的服务变得自治。
最好的,伊万