我目前正在尝试从 AxonDB 事件存储中读取所有事件并将它们导出到 CSV 文件。选择的方法是在附加到 AxonDB 服务器的 Spring Boot 应用程序中创建一个 EventHandler。将 TrackingEventProcessor 与 InMemoryTokenStore(默认)一起使用,我希望每次启动这个小应用程序时都从事件存储中读取所有事件。
不幸的是,我没有在我的 TrackingEventProcessor 中收到来自 AxonDB 客户端的事件,这让我困惑了几个小时。我走进了野兽的肚子,看到了以下行为,我想讨论一下:
- 首先,我使用的是原始应用程序(填充事件存储)也使用的所有相同版本:
- 轴突数据库 1.3
- axonDB 客户端 1.3
- 轴突框架 3.2.1
- 应用通过 gRPC 成功连接到 AxonDB
- AxonDBEventStore 读取一堆事件
2018-08-16 13:56:49.337 DEBUG 27781 --- [ault-executor-0] i.a.axondb.client.axon.AxonDBEventStore : Received event with token: 17742
ETC
- 我的 TrackingEventProcessor 以 Segment[0/0] 开始,这对我来说似乎是正确的,因为我使用了 InMemoryTokenStore
2018-08-16 14:18:50.190 INFO 30006 --- [t-projection]-0] o.a.e.TrackingEventProcessor : Fetched token: null for segment: Segment[0/0]
- TrackingEventProcessor 开始运行并尝试传递以下语句(来自版本 3.2.1 中的源代码第 248 行):
if (eventStream.hasNextAvailable(1, SECONDS))
- 上面的检查总是返回'false',因为eventStream(来自AxonDB客户端的EventBuffer)的实现总是没有结果。
我已经咬了一段时间的灰尘,并认为我已经走到了死胡同。我没有收到任何错误消息或异常。读取事件似乎有效,通过 AxonDBEventStore 日志记录确认。但在此之后,EventBuffer 保持为空,因此我的处理器甚至无法检查它是否应该处理它所呈现的事件。因此,我想我的处理器的名称在这里不会是问题。我尝试了几个处理器名称(与事件中的数据匹配),但没有任何运气。反序列化似乎确实有效,因为我昨天在调试期间在某处发现了一个反序列化事件(虽然不记得在哪里......)。它看起来和我预期的一样。
有谁知道这里可能是什么问题?