Java 跨服务共享轴突查询
我有三种不同的服务(A、B和C)正在运行,它们都连接到axonserver 4.3.3。除此之外,我还提供了一个包含所有事件的api服务,以便在所有服务之间共享。当一个事件被触发(比如说由服务A触发)时,其他服务(B&C)正在监听该事件,并做出相应的反应 现在,我还想共享查询,这样当一个服务(假设a)想要一些属于另一个服务(假设B)的信息时,它可以直接触发相应的查询,这些查询将由服务B监听并返回信息Java 跨服务共享轴突查询,java,spring-boot,axon,Java,Spring Boot,Axon,我有三种不同的服务(A、B和C)正在运行,它们都连接到axonserver 4.3.3。除此之外,我还提供了一个包含所有事件的api服务,以便在所有服务之间共享。当一个事件被触发(比如说由服务A触发)时,其他服务(B&C)正在监听该事件,并做出相应的反应 现在,我还想共享查询,这样当一个服务(假设a)想要一些属于另一个服务(假设B)的信息时,它可以直接触发相应的查询,这些查询将由服务B监听并返回信息 axon中是否允许它(即,在服务之间共享查询,就像我们对事件所做的那样) 如果允许,是否遵循ax
queryGateway.query(FindCourierBydQuery,responseType)
时:我得到了queryhandler未找到异常queryGateway.subscriptionQuery(FindCourierBydQuery,initialResponseType,updateResponseType)
时,我什么都没有得到queryGateway.scatterGather(FindCourierBydQuery,responseType,timeout,timeUnit)时,
:我得到一个空流- FindCourierBydQuery是在公共api服务中定义的
- 服务A和B具有公共api服务的依赖性
- 服务A执行FindCourierBydQuery的查询
- 服务B具有FindCourierBydQuery查询处理程序实现
- 在我看来,这完全没问题
Axon使用三种类型的消息:命令、事件和查询。它们代表您服务的API。
下游服务(在您的案例B&C中)可以发送命令、订阅事件或发送(和订阅)上游服务的查询(在您的案例A中)。简单地说,B&C依赖于A。如果可能,重要的是使这种依赖单向(唯一的B依赖于A,但不是相反)
通常,您希望在下游服务(B&C)的边缘有一个
反腐败层组件。它可以将事件从上游服务(A)转换为自己的命令,也可以将自己的事件转换为上游服务(A)的命令。这是一个传奇或常规事件处理程序(处理器)
如果您对查询感兴趣,您的反腐败层组件将使用查询网关从上游服务(a)发出(订阅)查询,并希望以自动化方式将响应转换为命令,类似于我提到的Saga/事件处理程序。通常,通过查询API的这种集成不是完全自动化的:从查询到命令的转换涉及用户。在这种情况下,服务B(下游)使用(服务A的)查询响应来呈现视图,用户可以从中发出下一个命令(服务B)
在下游系统中使用反腐败层组件将使您的服务具有自治性
最好的,
伊万感谢您的回复,请查看更新部分。请查看。它也应该掩盖你的疑虑。