当前位置: 首页 > 知识库问答 >
问题:

saga内轴突生成集合体

江光明
2023-03-14

我不知道如何恰当地问这个问题,但它是这样的:

我在特定事件上开始了传奇,然后我调度命令,该命令应该创建一些聚合,然后发送另一个事件,该事件将由传奇处理,以继续逻辑。

但是,每次我重新启动应用程序时,我都会得到一个错误,说序列x处的聚合事件已经插入,我想这是因为这个传奇还没有完成,当我重新启动它时,它会通过尝试创建新的聚合来再次启动它。

谢谢

共有1个答案

马银龙
2023-03-14

你发布的解决方案肯定会奏效。让我解释一下你在这里遇到的情况,也供其他人参考。

在Axon Framework4.x应用程序中,任何事件处理组件(也就是Saga实例)都由TrackingEventProcessor支持。跟踪事件处理器“跟踪”它正在处理事件流中的哪个点。它通过TrackingToken存储这些信息,TokenStore是其委托工作。

但是,如果您没有指定tokenstore,则每个跟踪事件处理器的内存中都有trackingtokens。这意味着在重新启动时,跟踪事件处理器会认为“噢,我还没有做任何事件处理,让我从时间开始”。因此,您的Saga实例每次都会启动一个新实例,试图重新创建给定的聚合实例。

 类似资料:
  • null 我设置应用程序的方式是使用aggregateview将所需数据持久化到数据库中。因此,现在我感觉事件只是存储在事件存储区中,并且只在调用命令后用于重新创建聚合。对于正在存储的事件和集合的重新创建,我难道没有其他事情要做吗?例如,我是否应该重新创建整个聚合,而不是按ID从数据库中取出aggregateview来更新它。

  • 问题:在聚合状态下,Axon SpringBoot应用程序类型为,而PostgreSQL数据库列类型为。在持久化时,成功地存储了create-commands-identifier。当发送update-command时,警告将上升,并且命令不会传递给聚合处理程序,因为需要字符串类型,如下Axon所述: IllegalArgumentException:为类....MyAggregate提供了错误类

  • 任何关于如何实现这一点的指示和/或文件都将不胜感激。

  • 我想了解一下如何从java对象集合中生成唯一的id(字符串/数字等),这些对象可以是各种数据类型,如String、BigDecimal、org。乔达。时间本地日期或组织。乔达。时间LocalDateTime或任何自定义java对象。 生成的id应该基于java对象中的值,以便为具有相同值的两个集合生成相同的id。类似于sql group by子句的内容。我想从group by(col1、col2、

  • 当我的抛出错误时,就会发生这种情况。 说明:我有两个事件,具有相同的,不能解决这个问题并抛出错误,因为。 我的问题是,是否有任何最佳实践来处理错误,这样其他事件就可以很好地工作,而无需等待修复此单个事件?或者有什么解决办法可以解决这个问题?