Axon 事件处理程序应该 - 间接地 - 发出新事件

Axon event handler should - indirectly - emit new event

我有一个应用程序,它包含存储针对某些对象的自定义查询。这些对象在另一个应用程序中管理,因此我只在这些对象发生某些事情时才接收事件。

现在,每次出现此类对象的新实例时(我通过事件得知),我想检查它是否与我的任何自定义查询匹配,如果匹配,则发出一个事件,表明有新的匹配项。

查询事先不知道哪些对象可能匹配,对象也不知道这些查询的存在。所以根据我的理解,saga 不会帮助我解决这个问题。

但我认为事件处理程序不应该直接发出新事件。所以我想知道我是否应该创建一个命令来发送到我的查询对象,以便它可以执行并检查是否匹配,或者是否有其他我可以应用的模式。

我认为我的自定义查询聚合不是检查新匹配项的正确位置,因为它实际上并不关心;它只是管理查询。但是不得不引入一个新的聚合并向它发送一个命令,只是让它检查新的匹配项,感觉它可能也不是正确的地方。

关于这个问题有什么建议吗?

对我来说,它看起来像是基于集合的验证! 如果是这样的话,AxonIQ 有一篇关于这个 problem/pattern 以及使用 AxonFramework 解决它的方法的非常好的博客!

https://axoniq.io/blog-overview/set-based-validation

基本上,您可以在 Aggregate 附近有一个投影,您可以在其中检查这些值,如果它们存在或不存在。请注意,这些预测应该永远不会暴露给外界,并且只能由配置有订阅事件处理器的聚合本身使用,这意味着它们将立即更新。