AxonDB事件存储中的事件未到达我的TrackingEventProcessor中

时间:2018-08-16 14:39:57

标签: event-sourcing axon

我目前正在尝试从AxonDB事件存储中读取所有事件,并将其导出到CSV文件。选择的方法是在附加到AxonDB服务器的Spring Boot应用程序中创建EventHandler。我希望将TrackingEventProcessor与InMemoryTokenStore一起使用(默认),每次启动此小型应用程序时,都希望从事件存储中读取所有事件。

不幸的是,我没有在我的TrackingEventProcessor中收到来自AxonDB客户端的事件,该事件已经使我困惑了几个小时。我走进了野兽的腹部,看到了以下行为,我想讨论一下:

  • 首先,我正在使用原始应用程序(用于填充事件存储)也使用的所有相同版本:
    • axonDB 1.3
    • axonDB客户端1.3
    • Axon框架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
  • 我的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保持为空,因此我的处理器甚至无法检查它是否应该处理呈现给它的事件。因此,我想我的处理器的名称在这里不是问题。我尝试了几个处理器名称(与事件中的数据匹配),但没有任何运气。反序列化似乎确实有效,因为昨天我在调试过程中的某个地方发现了反序列化事件(尽管不记得在哪里……)。看起来就像我期望的那样。

有人知道这里可能是什么问题吗?

3 个答案:

答案 0 :(得分:1)

您是否可以尝试将AxonDB客户端升级到1.3.1版,因为在没有定义向上转换程序的情况下1.3版存在问题。

请告诉我这是否有帮助。

关于

Marc Gathier

答案 1 :(得分:1)

您提到您有两个不同的应用程序。在共享核心API(命令,事件和查询)的那些应用程序之间是否有一个公共模块?如果不是这样,您的事件的全限定名称是否匹配(在发布应用程序中使用一个,在消费应用程序中使用一个)?如果事件的完全限定名称不匹配,则跟踪事件处理器将无法提取它。

让我知道这是否对您有帮助!

干杯, 米兰。

答案 2 :(得分:0)

不幸的是,由于找到了解决问题的另一种方法,所以我从未能够完成此软件。我怀疑事件没有出现在TrackingEventProcessor中,因为我没有像米兰建议的那样在项目中使用事件的POJO表示。

我最初的意图是创建一个通用工具,以通过Spring应用程序将GenericEventMessage重写为CSV,而不是为我正在从事的项目编写特定工具。可能这是不可能的,TrackingEventProcessor需要在类路径上使用POJO来生成GenericEventMessage。这在我之前没有发生过。