gpt4 book ai didi

json - 将 Akka actorRef 发送到 json

转载 作者:行者123 更新时间:2023-12-01 02:52:58 24 4
gpt4 key购买 nike

好的,所以我正在使用 SJSON 为 scala 中的案例类编写隐式转换,以使用 akka 框架向远程参与者发送消息。其中一个案例类如下所示

case class Example(id: String, actr: ActorRef) 

我将如何为这个案例类编写隐式。

我已经看到 ActorRefs 确实有一个 toBinary 方法,但我需要将它发送到Json

最佳答案

  • http://doc.akkasource.org/serialization-scala .当底层actor实例(在ActorRef/RemoteActorRef下)持有一些重要的运行时数据时,可能仅对有状态的actors需要显式[深度]序列化。对于这种情况,您应该为您的 Actor 实现以下类型类:

  • /**
    * Type class definition for Actor Serialization
    */
    trait FromBinary[T <: Actor] {
    def fromBinary(bytes: Array[Byte], act: T): T
    }

    trait ToBinary[T <: Actor] {
    def toBinary(t: T): Array[Byte]
    }

    // client needs to implement Format[] for the respective actor
    trait Format[T <: Actor] extends FromBinary[T] with ToBinary[T]


    如果你想要 ScalaJSON 序列化,而不是默认的序列化,你应该使用 SerializerBasedActorFormat特征
    trait SerializerBasedActorFormat[T <: Actor] extends Format[T] {
    val serializer: Serializer
    def fromBinary(bytes: Array[Byte], act: T) = serializer.fromBinary(bytes, Some(act.self.actorClass)).asInstanceOf[T]
    def toBinary(ac: T) = serializer.toBinary(ac)
    }

    ScalaJSON serializer .
    SJSON 库支持开箱即用的普通 Scala 对象的序列化,无需额外配置(在大多数情况下就足够了)。如果您需要忽略某些属性,或定义嵌入对象的序列化策略,请阅读 this .

    在你的情况下,你需要类似的东西
    @BeanInfo
    case class Example(id: String,
    @(JSONTypeHint @field)(value = classOf[MyActor])
    actr: ActorRef)

    implicit object MyActorFormat extends SerializerBasedActorFormat[MyActor] {
    val serializer = Serializer.ScalaJSON
    }
  • 通常,当您在 Akka 中向远程参与者发送消息时,您不需要显式地序列化您的案例类 - Akka 本身在通过 TCP 发送之前使用 protobufs 序列化所有数据。
  • 为什么需要序列化对 Actor 的引用?如果只是需要接收消息的actor调用发送者,可以直接使用self.sender , 如果邮件是用 ! 发送的, 或 self.senderFuture , 当使用 !! 发送消息时或 !!! . ActorRef(或RemoteActorRef)本身只是一个actor的抽象接口(interface),用于封装内部actor的实现并让外部仅通过消息与actor通信(与stdlib Actors相反/很像在Erlang [processes]中所做的)和保存非常少量的数据,这些数据对于序列化和通过线路发送是有意义的。
  • 关于json - 将 Akka actorRef 发送到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4258227/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com