axon - Axon Token [IndexTrackingToken{globalIndex=2}] 类型错误
问题描述
我正在从 axon 2 更改为 axon 4,我在其中使用基于 spring boot 的配置以及 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$1(BatchingEventStorageEngine.java:123)
at org.axonframework.eventsourcing.eventstore.BatchingEventStorageEngine$EventStreamSpliterator.tryAdvance(BatchingEventStorageEngine.java:236)
at java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(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.Spliterators$1Adapter.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,因为这可以节省配置数据库的时间(因为您根本不必配置它),这也将解决这种差异。
GlobalSequenceTrackingToken
从表中删除现有的 s,token_entry
以便 Axon 可以将它们替换为GapAwareTrackingToken
.
假设您有意识地离开 Axon Server,我认为您会选择选项 2。这样做时,将您GapAwareTrackingToken
的 s 初始化为从 s 所在的同一点开始可能是有益GlobalSequenceTrackingToken
的。
查看TrackingEventProcessorConfiguration
为给定的跟踪事件处理器指定初始令牌。
如果您仍处于迁移的开发阶段,我认为您可以完全放弃这些令牌以确保安全。
推荐阅读
- json - 如何将带有 Emoji 的 JSON 响应保存为 Unicode?
- go - Go中的同步条件语句
- javascript - Nextjs:根据用户数据渲染页面或显示404页面
- mysql - 使用 MySQL 的 F# 程序的基本模型
- regex - gawk gensub 正则表达式,我如何用背靠背的类似捕获组替换一个或多个
- pyspark - 如何在 GCS 中的增量表之上创建 BQ 外部表并仅显示最新快照
- powershell - 如何在PowerShell中列出文件夹中的所有文件(执行cmd的`dir / A`)?
- reactjs - 如何不断获取 docker 容器的状态并在反应应用程序中显示
- python - 如何使用 pythonic 解决方案根据其他数据集的类别槽的可用性在数据帧上添加熊猫数字列?
- amazon-web-services - 提供对 AWS 中 S3 路径的只读访问权限