将Akka actorRef发送到json
好的,我正在用SJSON为scala中的case类编写隐式转换,以使用akka框架向远程参与者发送消息。其中一个case类如下所示将Akka actorRef发送到json,json,scala,akka,Json,Scala,Akka,好的,我正在用SJSON为scala中的case类编写隐式转换,以使用akka框架向远程参与者发送消息。其中一个case类如下所示 case class Example(id: String, actr: ActorRef) 我将如何为这个案例类编写隐式 我已经看到ActorRefs确实有一个toBinary方法,但我需要将它发送到JSON 。当底层actor实例(在ActorRef/RemoteActorRef下)包含一些重要的运行时数据时,只有有状态的actor才需要显式[deep]序列
case class Example(id: String, actr: ActorRef)
我将如何为这个案例类编写隐式
我已经看到ActorRefs确实有一个toBinary方法,但我需要将它发送到JSON
@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序列化所有数据李>
- 为什么需要序列化对参与者的引用?如果接收消息的参与者只需要给发件人打电话,您只需使用
,如果消息是通过self.sender
发送的当消息与
一起发送时,code>或
代码>或self.senderFuture
代码>。ActorRef(或RemoteActorRef)本身只是actor的抽象接口,用于封装内部actor的实现,并允许外部仅通过消息与actor通信(与stdlib Actors相反/很像在Erlang[进程]中完成的操作)并保存非常少量的数据,这些数据可以通过有线方式进行序列化和发送李>
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)
}
@BeanInfo
case class Example(id: String,
@(JSONTypeHint @field)(value = classOf[MyActor])
actr: ActorRef)
implicit object MyActorFormat extends SerializerBasedActorFormat[MyActor] {
val serializer = Serializer.ScalaJSON
}