Akka:以编程方式添加自定义序列化程序

时间:2019-07-16 05:17:41

标签: scala serialization akka serializer

基于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
  }
}

1 个答案:

答案 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)