代码之家  ›  专栏  ›  技术社区  ›  matanster

如何跟踪AKKA序列化失败的根本原因?

  •  0
  • matanster  · 技术社区  · 7 年前

    从AKKA获取一个序列化错误,如下所示,如何包装AKKA消息中有问题的不可序列化成员/字段?异常没有命名无法序列化的成员值(以下 com.our.member.object ,但该对象本身包含许多嵌套成员,并且错误消息似乎对无法序列化的有问题的嵌套对象几乎没有提示:

    2018-05-24t06:30:51.897Z错误VCA-AKKA.actor.default-dispatcher-4 akka.remote.endpointwriter-无法使用序列化程序[类akka.actor.actorselectionMessage]序列化远程消息[类akka.remote.serialization.messagecontainerSerializer]。暂时关联错误(关联保持活动状态)akka.remote.message serializer$serializationException:未能使用序列化程序[class akka.remote.serialization.messageContainerSerializer]序列化远程消息[class akka.actor.actorselectionMessage]。在akka.remote.messageserializer$.serializer(messageserializer.scala:62)在akka.remote.endpointwriter.$anonfun$serialimessage$1(endpoint.scala:895)在scala.util.dynamicvariable.withValue(dynamicvariable.scala:58)在akka.remote.endpointwriter.serialimessage(endpoint.scala:895)在akka.remote.endpointwriter.writesend(endpoint.scala:786)在akka.remote.endpointwriter$$anonfun$4.applyorelse(endpoint.scala:761)在akka.actor.actor.aroundreceive(actor.scala:513)在akka.actor.actor.aroundreceive$(actor.scala:511)在akka.remote.endpointactor.aroundreceive(endpoint.scala:452)在akka.actor.acakka.actor.actorcell.invoke(actorcell.scala:519)at akka.dispatch.mailbox.processmailbox(mailbox.scala:257)at akka.dispatch.mailbox.run(mailbox.scala:224)at akka.dispatch.mailbox.exec(mailbox.scala:234)at akka.dispatch.forkjoin.forkjointask.doexec(fOrkJoTunask.java:260)在Akk.FokCynPoo.$WorkQue.RunTebug(FokCouthPoal.java:1339)在Akk.Prask.FokJoo.FrkCuangPo..RunWorkWork(FokCouthPoal.java:1979)在Akk.Deff.FokJoo.FrkCuleWorksTrime.Run(FokCopyWorkWorkth.java:107)引起的:JavaIO.NoTealAlsiababExabl在Java.Io.ObjutOutoStudio.ObjutOutsObjut.0(ObjutoPutsStudio.java:1184)中,在java. Io.ObjutoTraveReField:ObjutOutsPruts.java:1548),在java. Io.ObjutOutsPox.WruteSerialDATA(ObjutOutsPosiv.java:1509)在java. IO.ObjutOutPutsField.WrraveSimulyObj.在Java.Io.ObjutoPutsStudio.WraveObj.ObjutoObj.ObjutoPosiv.0(ObjutoPutsStudio.java:1178)中,在java. Io.ObjutoPutsField.ObjutOutsPosiv.java(1548)在JavaIO.ObjutOutPutsField.WraveOr.ObjutoPutsStrut.WruteSerialDATA(ObjutOutsPosiv.java:1509)中写入。在Java.Io.ObjutoPutsStudio.WraveObjut.ObjutoObj.ObjutoObj.Obj.Out.ObjutoPutsFuto.WraveObjo(ObjutOutsPosiv.java:348)在Akk.Services中序列化.javaSerialisher .$AnFunFun $2二进制1(Serializer .Scala:313)在Scale.RunTime.java8JFrase0$mcv$sp.apply(jfunction0$mcv$sp.java:12)位于scala.util.dynamicvariable.withValue(dynamicvariable.scala:58)位于akka.serialization.java serializer.tobinary(serializer.scala:313)位于akka.remote.serialization.messagecontainerserializer.serialization(messagecontainerserializer.scala:37)位于akka.remote.serialization.messageContainerSerializer.toBinary(messageContainerSerializer.scala:26)位于akka.remote.messageSerializer$.serialization(messageSerializer.scala:47)…省略17个通用框架

    2 回复  |  直到 7 年前
        1
  •  0
  •   Christopher Batey    7 年前

    从您的消息来看,您似乎正在使用javaserialization(在Akka中是默认的,但对于生产非常不鼓励)。

    Akka只知道要序列化的顶级对象,然后由序列化程序给出一个好的错误消息。在这种情况下,javaserializatuoin通常会提供它无法序列化的特定内容,并且您可以添加可序列化的实现,直到它工作为止。

    我建议你搬到Protobuf这样的地方,在演员系统之间进行远程通信。

        2
  •  2
  •   Danilo M. Oliveira    6 年前

    我今天收到这个错误,错误的原因是忘记向消息类添加“implements serializable”。对于帮助我实现这一点,错误消息和堆栈跟踪是绝对无用的。

    推荐文章