从 axon 聚合调用第三方服务是个好主意吗

Ser*_*man 2 spring axon

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

@Aggregate
public class SomeAggregate {
[...]
   @CommandHandler
   public void someHandler() {
     if(thirdPartyService.invoke) {
       apply(...)
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 6

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

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

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