来自 AxonDB 事件存储的事件没有到达我的 TrackingEventProcessor
Events from AxonDB eventstore do not arrive in my TrackingEventProcessor
我目前正在尝试从 AxonDB 事件存储中读取所有事件并将它们导出到 CSV 文件。选择的方法是在附加到 AxonDB 服务器的 Spring 启动应用程序中创建一个事件处理程序。将 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))
- 上面总是检查 returns 'false',因为 eventStream(来自 AxonDB 客户端的 EventBuffer)的实现总是没有结果。
我已经苦苦思索了一段时间,觉得自己走到了死胡同。我没有收到任何错误消息或异常。读取事件似乎有效,已通过 AxonDBEventStore 日志记录确认。但在此之后,EventBuffer 保持为空,所以我的处理器甚至都不会检查它是否应该处理它所呈现的事件。因此,我想我的处理器的名称不是这里的问题。我尝试了几个处理器名称(与事件中的数据匹配)但没有任何运气。反序列化似乎确实有效,因为我昨天在调试期间在某处发现了一个反序列化事件(虽然不记得在哪里......)。它看起来和我预期的一样。
有谁知道这可能是什么问题?
您能否尝试将 AxonDB 客户端升级到 1.3.1 版,因为 1.3 版在没有定义上行转换程序时存在问题。
如果有帮助,请告诉我。
此致,
马克·盖蒂尔
您提到您有两个不同的应用程序。在那些共享核心 API(命令、事件和查询)的应用程序之间是否有一个通用模块?如果万一情况并非如此,您的事件的完全限定名称是否匹配(一个在发布应用程序中,一个在消费应用程序中)?如果事件的完全限定名称不匹配,跟踪事件处理器将无法拾取它。
如果这对你有帮助,请告诉我!
干杯,
米兰.
不幸的是,由于找到了另一种解决问题的方法,我一直无法完成这款软件。我怀疑事件没有出现在 TrackingEventProcessor 中,因为我的项目中没有事件的 POJO 表示,就像 Milan 建议的那样。
我的初衷是创建一个通用工具,通过 Spring 应用程序将 GenericEventMessage 重写为 CSV,而不是为我正在处理的项目编写特定工具。这可能是不可能的,TrackingEventProcessor 需要类路径上的 POJO 来生成 GenericEventMessage。我之前没有想到这一点。
我目前正在尝试从 AxonDB 事件存储中读取所有事件并将它们导出到 CSV 文件。选择的方法是在附加到 AxonDB 服务器的 Spring 启动应用程序中创建一个事件处理程序。将 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))
- 上面总是检查 returns 'false',因为 eventStream(来自 AxonDB 客户端的 EventBuffer)的实现总是没有结果。
我已经苦苦思索了一段时间,觉得自己走到了死胡同。我没有收到任何错误消息或异常。读取事件似乎有效,已通过 AxonDBEventStore 日志记录确认。但在此之后,EventBuffer 保持为空,所以我的处理器甚至都不会检查它是否应该处理它所呈现的事件。因此,我想我的处理器的名称不是这里的问题。我尝试了几个处理器名称(与事件中的数据匹配)但没有任何运气。反序列化似乎确实有效,因为我昨天在调试期间在某处发现了一个反序列化事件(虽然不记得在哪里......)。它看起来和我预期的一样。
有谁知道这可能是什么问题?
您能否尝试将 AxonDB 客户端升级到 1.3.1 版,因为 1.3 版在没有定义上行转换程序时存在问题。
如果有帮助,请告诉我。
此致,
马克·盖蒂尔
您提到您有两个不同的应用程序。在那些共享核心 API(命令、事件和查询)的应用程序之间是否有一个通用模块?如果万一情况并非如此,您的事件的完全限定名称是否匹配(一个在发布应用程序中,一个在消费应用程序中)?如果事件的完全限定名称不匹配,跟踪事件处理器将无法拾取它。
如果这对你有帮助,请告诉我!
干杯, 米兰.
不幸的是,由于找到了另一种解决问题的方法,我一直无法完成这款软件。我怀疑事件没有出现在 TrackingEventProcessor 中,因为我的项目中没有事件的 POJO 表示,就像 Milan 建议的那样。
我的初衷是创建一个通用工具,通过 Spring 应用程序将 GenericEventMessage 重写为 CSV,而不是为我正在处理的项目编写特定工具。这可能是不可能的,TrackingEventProcessor 需要类路径上的 POJO 来生成 GenericEventMessage。我之前没有想到这一点。