如果用户的注册事件失败,即使命令成功,我们希望为特定的事件处理程序重新运行特定的事件。
我们考虑使用跟踪事件处理器,但这似乎是从一个特定的时间点重播一组事件。然而,在我们的例子中,如果昨天有100个事件,我们只想在中间重新运行一个特定的事件。
目前,我们正在迁移到Axon,因此决定主要使用SubscriptionEventProcessors,因为它更同步(即错误在命令处理程序中传播)。我们确实了解订阅处理器是无状态的,因为它们只处理通过事件总线接收的内容。
为了更快地回答这个问题,我会用一个类似的回答,就像我在这个问题上发布的一样。
快速地重复我在那里的响应,它可以概括为:创建一个查询模型,其中包含“重新处理”所需的@eventHandler
注释方法,这些方法可以作为Axon的AnnotationEventHandlerAdapter
构造函数的输入提供。您可以根据需要使用筛选的事件流调用后续的AnnotationEventHandlerAdapter
。结果,查询模型将更新为您需要的格式。
因此,您将在例外情况下执行该操作,而不是因为用户需要该信息而将其作为查询形式执行。无论如何,您仍将重新形成查询模型,但只是基于一组特定的事件。
顺便说一下,当涉及到事件处理器的选择时,我仍然选择TrackingEventProcessor
。是的,这意味着事件失败不会发出回滚,但本质上事件表示它已经发生。因此,回滚是因为其他事情失败,处理该事件是不正确的;命令仍然成功了,所以它也应该保持这样。
最后,您正在寻找日志逻辑。您共享的跟踪扩展最近刚刚从测试状态中退出,因此可以安全地使用。接下来,可以通过将LoggingInterceptor
配置为MessageHandlerInterceptor
和MessageDispatchInterceptor
来实现基本的日志记录(关于这方面的文档可以在这里找到)。如果您希望引入方面逻辑:Axon有一个类似的机制来绑定到每个消息处理程序中。请查看此页面上的HandleRenhancer
/HandleRenhancerDefinition
。
希望这一切能帮助你@Milindad!
我有两个独立的Spring-Boot微服务,一个是命令端,另一个是查询端,命令服务将事件存储在Mongodb中,将事件放到RabbitMQ中,然后查询端订阅队列并建立查询模型。现在如何在Axon中实现事件重放和建立查询模型?是否有可能两个服务在不同的节点上独立运行。如果不可能,那么我应该遵循什么来实现这一点。
问题:在聚合状态下,Axon SpringBoot应用程序类型为,而PostgreSQL数据库列类型为。在持久化时,成功地存储了create-commands-identifier。当发送update-command时,警告将上升,并且命令不会传递给聚合处理程序,因为需要字符串类型,如下Axon所述: IllegalArgumentException:为类....MyAggregate提供了错误类
我在用轴突事件跟踪处理器。有时事件需要10秒才能处理。 这似乎导致消息再次被处理,并出现在日志“释放令牌X/0的声明失败。它由另一个节点拥有”中。 如果我增加段数,它不会记录此事件,但事件仍被处理两次,所以我认为这可能会引起误解。 (我想我搞错了) 我已经尝试调整fetchDelay、cleanupDelay和TokenClaimInterval。没有一个解决了这个问题。我是不是缺了什么东西? 编
当插入数据数值“财政月份的第5周”不被识别时,我得到了这个错误,我甚至没有在我的SQL中的错误消息中显示的字段,请参见附加的代码。我不知道要找什么,我在这里发帖,至少请给我指出一个我需要寻找的主题
本文向大家介绍SQL中的特殊运算符,包括了SQL中的特殊运算符的使用技巧和注意事项,需要的朋友参考一下 SQL中不同的特殊运算符如下- 所有运算符 任何运算符 运算符之间 EXISTS运算符 IN运算符 LIKE运算符 现在让我们创建一个表来了解特殊运算符的示例- <员工> Emp_ID Emp_Name Emp_Salary Emp_DeptID Emp_DeptName 1 亚伦 10000