spring - 从轴突聚合调用第三方服务是个好主意吗

标签 spring axon

我有一个轴突聚合体。它处理命令,并且在应用事件之前必须调用第三方服务来验证某些参数,根据此验证我是否应用事件。这是好的做法吗?或者我在发送命令之前进行了验证?

@Aggregate
public class SomeAggregate {
[...]
   @CommandHandler
   public void someHandler() {
     if(thirdPartyService.invoke) {
       apply(...)
     }
   }
}

最佳答案

如果它是非阻塞(域)服务,类似于有限状态机,则可以从聚合内部调用,因为它很可能很快就会完成。 但是,“第三方服务”对我来说听起来像是一个外拨电话,这可能需要一些时间。

当 Axon 加载聚合时,它会阻塞聚合,因此其他线程无法更改它的状态/处理它的命令。 第三方服务意味着聚合被阻止的时间更长。

因此,我建议不要在聚合中调用第三方服务。 要么在进入聚合之前调用服务,要么在命令处理完成后执行补偿操作以恢复决策。两者中哪一个在您的场景中最有意义,取决于您的领域。然而,我认为通过第三方服务进行“预验证”是最合理的选择。

关于spring - 从轴突聚合调用第三方服务是个好主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774878/

相关文章:

spring - 在JSP中使用JSTL是否需要指定Spring JSTLView解析器?

java - 用于覆盖 XML 定义的 Bean 注释 - Spring

java - Spring Services中是否允许有实例变量?

proxy - 如何将命令、查询和事件转发到另一个 Axon 实例

spring - Axon @QueryHandler 与 Spring @ExceptionHandler

spring - 在 Spring 4 中配置 WebSocket 服务器

spring - Spring AOP中CGLIB代理相对于动态代理的缺点是什么?

java - 轴突框架 : Saga project with compensation events between two or three microservices

kotlin - 使用 Generic 返回 Response 时未找到用于查询的 Axon 处理程序

cqrs - Axon Framework与Eventuate的比较