基于Akka serialization documents,我们可以实现自己的序列化器并通过配置进行注册。是否可以通过编程方式(而不是通过配置方式)注册我们自己的序列化程序,例如通过ActorSystem
实例?
更新:
类似这样的东西:
ActorSystem actorSystem = ActorSystem.create("app");
actorSystem.registerSerializer(MySerializable.class, MyOwnSerializer());
代替:
actor {
serializers {
custom = "x.y.z.MyOwnSerializer"
}
serialization-bindings {
"x.y.z.MySerializable" = custom
}
}
答案 0 :(得分:1)
序列化器是通过查询akka.actor.serializers
从配置中创建的,因此没有直接选择使用registerSerializer
之类的方法来覆盖它们。
您可以做的是,以编程方式创建Config
对象,然后将其作为第二个参数显式传递给ActorSystem.create
。例如,您可以这样做:
import com.typesafe.config._
//scala.collection.JavaConverters were deprecated in Scala 2.13
import scala.jdk.CollectionConverters._
val config = ConfigFactory.load() //load default values
//override 'akka.actor.serializers'
.withValue(
"akka.actor.serializers",
ConfigValueFactory.fromMap(Map("hello" -> "x.y.z.MyOwnSerializer").asJava
).resolve()
val systemWithCustomConfig = ActorSystem.create("app", config)