【发布时间】:2021-08-08 21:45:28
【问题描述】:
我有一个在节点上运行的 akka 微服务集群。我正在尝试使用 Jackson 序列化程序在节点(微服务)之间交换特定于应用程序的消息。 我的代码是用 scala 编写的,而不是 Java
我使用 scala 'case class' 作为参与者之间交换的 akka 消息,并且每个消息(案例类)都有一个内置的 val LOG:org.slf4j.Logger 来记录特定的业务逻辑处理信息。
当我在节点之间发送消息时出现异常
警告 akka.remote.artery.Deserializer - 无法反序列化来自 [akka://MyCluster@127.0.0.1:25251] 的消息,序列化程序 ID 为 [33] 和清单 [com...MyCaseClassMessage]。 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造org.slf4j.Logger 的实例(没有创建者,如默认构造函数,存在):抽象类型要么需要映射到具体类型,要么具有自定义反序列化器,要么包含其他类型信息
在 [来源:..."[截断 'n' 个字节];行:'n',列:'n'] (通过引用链:com...MyCaseClassMessage["LOG"])
我的案例类基本上是这样的:
case class MyCaseClassMessage()
extends CborSerializable {
override val LOG:Logger = LoggerFactory.getLogger(classOf[MyCaseClassMessage])
val businessLogic:Array[Byte] = ...
def apply():Array[Byte] = ...
}
我不知道如何在我的案例类中向 Jackson 指定如何序列化和(或)反序列化“val LOG:Logger”。我只知道如果我删除我的 Logger,将其替换为(例如) println("message") 我对序列化和反序列化没有任何问题。
有什么帮助吗?
【问题讨论】:
标签: scala jackson deserialization slf4j akka-cluster