【问题标题】:org.axonframework.serialization.UnknownSerializedTypeException(Could not deserialize a message. The serialized type is unknown:org.axonframework.serialization.UnknownSerializedTypeException(无法反序列化消息。序列化类型未知:
【发布时间】:2019-09-18 08:55:23
【问题描述】:

我已经用 spring boot axon 实现了两个微服务。

微服务 A 包含 UserAggregate。

微服务 B 包含 UserAggregate。

微服务 A 能够在 UserAggregate 中生成以下 2 个事件。

1) UserCreatedEvent 存储在事件存储中,类型为 UserAggregate 的 0 序列

2) 存储在事件存储中的 UserUpdatedEvent 具有 1 个 UserAggregate 类型的序列

现在,微服务 B 想在同一个 UserAggregate 上生成另一个事件,事件存储操作是从 B 服务生成的

3) UserDeletedEvent 需要以 2 个 UserAggregate 类型的序列存储在事件存储中

但是我遇到了异常,我该如何解决这个异常?org.axonframework.serialization.UnknownSerializedTypeException

2019-09-17 21:46:41.829 WARN 1756 --- [onPool-worker-2] o.a.c.gateway.DefaultCommandGateway:命令“com.ms.commands.UserDeletedCommand”导致 org.axonframework.serialization.UnknownSerializedTypeException(无法反序列化消息。序列化类型未知:com.ms.events.UserCreatedEvent (rev. null))

我正在使用带有 spring boot 2 的 axon 3.3.3 版本。 我正在使用 JdbcEventStorageEngine。

@Bean
public JdbcEventStorageEngine eventStorageEngine(ConnectionProvider connectionProvider) {
return new JdbcEventStorageEngine(connectionProvider, NoTransactionManager.INSTANCE);
    }

在 application.properties 中

axon.serializer.general=jackson
axon.serializer.events=jackson
axon.serializer.messages=jackson

【问题讨论】:

    标签: axon


    【解决方案1】:

    应该知道应用程序中任何消息或同一限界上下文中的一组微服务的完全限定类名。

    没有这个,任何应用程序实际上都无法“理解”来自另一个应用程序的调度命令、事件或查询的序列化形式。

    从这一点开始,通常需要为您的命令(以及它们的潜在响应、事件和查询(带有查询响应))提供一个专用的模块/包/存储库。 每个属于同一个限界上下文的项目都可以依赖这个“core-api”包,这样他们就都知道前面提到的任何消息的完全限定类名。

    【讨论】:

    • 谢谢@Steven,在将 UserAggregate 的所有事件和命令从微服务 A 复制到 B 后,我能够解决该错误。
    • 很高兴知道它成功了 Narasimha。然而,我会建议一种不同的共享实现格式,例如通过对“消息存储库”的共享依赖。而且,如果我的回答解决了您的问题,您介意将其标记为这样吗?这有助于将来此页面的其他查看者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2019-08-15
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多