【问题标题】:Akka: Add custom serializer programmaticallyAkka:以编程方式添加自定义序列化程序
【发布时间】:2019-11-24 18:55:44
【问题描述】:

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

【问题讨论】:

  • 我认为没有任何明确的方法可以注册自定义序列化程序。如果是这样,他们会在他们的文档中提到它。

标签: scala akka serialization


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多