我已经用spring boot axon实现了两个微服务。
微服务A包含UserAggregate。
微服务B包含UserAggregate。
微服务A能够在UserAggregate中生成以下2个事件。
1)用户创建的UserCreatedEvent存储在事件存储中,且序列类型为0,类型为UserAggregate
2)用1个类型为UserAggregate的序列存储在事件存储中的UserUpdatedEvent
现在,微服务B希望在同一UserAggregate上生成另一个事件,该事件存储操作是从B服务生成的
3)UserDeletedEvent需要以2个类型为UserAggregate的序列存储在事件存储中
但是我遇到了异常,如何解决此异常?org.axonframework.serialization.UnknownSerializedTypeException
2019-09-17 21:46:41.829警告1756-[onPool-worker-2] oacgateway.DefaultCommandGateway:命令'com.ms.commands.UserDeletedCommand'导致org.axonframework.serialization.UnknownSerializedTypeException(无法反序列化消息。序列化类型未知:com.ms.events.UserCreatedEvent(rev。null))
我在Spring Boot 2中使用了轴突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
答案 0 :(得分:1)
应该知道应用程序或同一绑定上下文中的一组微服务的任何消息的完全限定的类名。
否则,任何应用程序实际上将无法“理解”来自另一个应用程序的调度命令,事件或查询的序列化形式。
从这一点出发,通常需要为命令(及其潜在的响应,事件和查询(带有查询响应))提供专用的模块/程序包/存储库。 然后,属于相同绑定上下文的每个项目都可以依赖此“ core-api”包,以便他们都知道传入的任何消息的上述完全限定的类名。