Axon Token [IndexTrackingToken{globalIndex=2}] 类型错误
Axon Token [IndexTrackingToken{globalIndex=2}] is of the wrong type
我正在从 axon 2 更改为 axon 4,我正在使用 spring 基于引导的配置,其中包含 axon-spring-boot 和 mysql DB。
在我的应用程序属性中
我添加了这个配置
axon.serializer.general = XSTREAM
axon.serializer.events= XSTREAM`enter code here`
axon.serializer.messages=XSTREAM
这是我在日志中得到的异常
org.axonframework.eventhandling.TrackingEventProcessor Error occurred. Starting retry mode.
java.lang.IllegalArgumentException: Token [IndexTrackingToken{globalIndex=2}] is of the wrong type. Expected [GapAwareTrackingToken]
at org.axonframework.common.Assert.isTrue(Assert.java:56)
at org.axonframework.eventsourcing.eventstore.jpa.JpaEventStorageEngine.fetchTrackedEvents(JpaEventStorageEngine.java:137)
at org.axonframework.eventsourcing.eventstore.BatchingEventStorageEngine.lambda$readEventData(BatchingEventStorageEngine.java:123)
at org.axonframework.eventsourcing.eventstore.BatchingEventStorageEngine$EventStreamSpliterator.tryAdvance(BatchingEventStorageEngine.java:236)
at java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState[=11=](StreamSpliterators.java:294)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)
at java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:300)
at java.util.SpliteratorsAdapter.hasNext(Spliterators.java:681)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.peekPrivateStream(EmbeddedEventStore.java:397)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.peek(EmbeddedEventStore.java:356)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.hasNextAvailable(EmbeddedEventStore.java:333)
at org.axonframework.common.stream.BlockingStream.hasNextAvailable(BlockingStream.java:40)
at org.axonframework.eventhandling.TrackingEventProcessor.checkSegmentCaughtUp(TrackingEventProcessor.java:270)
at org.axonframework.eventhandling.TrackingEventProcessor.processBatch(TrackingEventProcessor.java:216)
at org.axonframework.eventhandling.TrackingEventProcessor.processingLoop(TrackingEventProcessor.java:181)
at org.axonframework.eventhandling.TrackingEventProcessor$TrackingSegmentWorker.run(TrackingEventProcessor.java:661)
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:771)
at org.axonframework.eventhandling.TrackingEventProcessor$CountingRunnable.run(TrackingEventProcessor.java:588)
at java.lang.Thread.run(Thread.java:748)
任何帮助将不胜感激
你看到的是 JpaEventStorageEngine
抱怨你给它一个 GlobalSequenceTrackingToken
(GlobalSequenceTrackingToken
的 toString()
方法声明 "IndexTrackingToken{" + "globalIndex=" + globalIndex + '}'
),而它需要 GapAwareTrackingToken
.
发生这种情况的可能情况是您最初使用 Axon Server 启动您的应用程序,它使用 GlobalSequenceTrackingToken
,现在正在从 Axon Server 作为您的事件存储转向个人维护的 RDBMS 设置使用 JPA。
我怎么看,你有两种方法可以解决这个问题:
- 继续使用 Axon 服务器,因为这样可以节省配置数据库的时间(因为您根本不必配置它),这也将解决这个差异。
- 从您的
token_entry
table 中删除现有的 GlobalSequenceTrackingToken
,以便 Axon 可以在 GapAwareTrackingToken
. 中替换它们
假设您有意识地远离 Axon 服务器,我认为您会选择选项 2。这样做时,初始化您的 GapAwareTrackingToken
以在同一点开始可能是有益的GlobalSequenceTrackingToken
s 在。
查看 TrackingEventProcessorConfiguration
以指定给定跟踪事件处理器的初始标记。
如果您仍处于迁移的开发阶段,我想您可以将这些令牌完全丢弃到安全时间。
我正在从 axon 2 更改为 axon 4,我正在使用 spring 基于引导的配置,其中包含 axon-spring-boot 和 mysql DB。
在我的应用程序属性中 我添加了这个配置
axon.serializer.general = XSTREAM
axon.serializer.events= XSTREAM`enter code here`
axon.serializer.messages=XSTREAM
这是我在日志中得到的异常
org.axonframework.eventhandling.TrackingEventProcessor Error occurred. Starting retry mode.
java.lang.IllegalArgumentException: Token [IndexTrackingToken{globalIndex=2}] is of the wrong type. Expected [GapAwareTrackingToken]
at org.axonframework.common.Assert.isTrue(Assert.java:56)
at org.axonframework.eventsourcing.eventstore.jpa.JpaEventStorageEngine.fetchTrackedEvents(JpaEventStorageEngine.java:137)
at org.axonframework.eventsourcing.eventstore.BatchingEventStorageEngine.lambda$readEventData(BatchingEventStorageEngine.java:123)
at org.axonframework.eventsourcing.eventstore.BatchingEventStorageEngine$EventStreamSpliterator.tryAdvance(BatchingEventStorageEngine.java:236)
at java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState[=11=](StreamSpliterators.java:294)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)
at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:161)
at java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:300)
at java.util.SpliteratorsAdapter.hasNext(Spliterators.java:681)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.peekPrivateStream(EmbeddedEventStore.java:397)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.peek(EmbeddedEventStore.java:356)
at org.axonframework.eventsourcing.eventstore.EmbeddedEventStore$EventConsumer.hasNextAvailable(EmbeddedEventStore.java:333)
at org.axonframework.common.stream.BlockingStream.hasNextAvailable(BlockingStream.java:40)
at org.axonframework.eventhandling.TrackingEventProcessor.checkSegmentCaughtUp(TrackingEventProcessor.java:270)
at org.axonframework.eventhandling.TrackingEventProcessor.processBatch(TrackingEventProcessor.java:216)
at org.axonframework.eventhandling.TrackingEventProcessor.processingLoop(TrackingEventProcessor.java:181)
at org.axonframework.eventhandling.TrackingEventProcessor$TrackingSegmentWorker.run(TrackingEventProcessor.java:661)
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:771)
at org.axonframework.eventhandling.TrackingEventProcessor$CountingRunnable.run(TrackingEventProcessor.java:588)
at java.lang.Thread.run(Thread.java:748)
任何帮助将不胜感激
你看到的是 JpaEventStorageEngine
抱怨你给它一个 GlobalSequenceTrackingToken
(GlobalSequenceTrackingToken
的 toString()
方法声明 "IndexTrackingToken{" + "globalIndex=" + globalIndex + '}'
),而它需要 GapAwareTrackingToken
.
发生这种情况的可能情况是您最初使用 Axon Server 启动您的应用程序,它使用 GlobalSequenceTrackingToken
,现在正在从 Axon Server 作为您的事件存储转向个人维护的 RDBMS 设置使用 JPA。
我怎么看,你有两种方法可以解决这个问题:
- 继续使用 Axon 服务器,因为这样可以节省配置数据库的时间(因为您根本不必配置它),这也将解决这个差异。
- 从您的
token_entry
table 中删除现有的GlobalSequenceTrackingToken
,以便 Axon 可以在GapAwareTrackingToken
. 中替换它们
假设您有意识地远离 Axon 服务器,我认为您会选择选项 2。这样做时,初始化您的 GapAwareTrackingToken
以在同一点开始可能是有益的GlobalSequenceTrackingToken
s 在。
查看 TrackingEventProcessorConfiguration
以指定给定跟踪事件处理器的初始标记。
如果您仍处于迁移的开发阶段,我想您可以将这些令牌完全丢弃到安全时间。