簡體   English   中英

如何更改Akka應用程序的默認Serializer?

[英]How to change default Serializer for an Akka application?

我讀了akka序列化頁面 ,他們在那里談論serialization-bindings

serialization-bindings {
      "java.lang.String" = java
      "docs.serialization.Customer" = java
      "com.google.protobuf.Message" = proto
      "docs.serialization.MyOwnSerializable" = myown
      "java.lang.Boolean" = myown
    }

我正在考慮使用kyro序列化,並想知道是否有一種方法可以打開kyro序列化默認為完整的應用程序? 而不是給每個類或包名?

就像是

serialization-bindings {
     default = kyro
}

這是方式,我使用kryo:

serializers {
  kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
}

serialization-bindings {
  "com.ex.es.Msg" = kryo
  "java.io.Serializable" = none
}

與Kunal類似,我通過wire / store / serialize以任何方式發送的所有消息都擴展了Msg類。 這不僅僅是因為我不確定是否有辦法設置默認的序列化程序,而且還要讓我明確,我的應用程序中序列化了什么。

現在試試你的實際問題

我還必須設置"java.io.Serializable" = none否則我收到一個警告,它不確定,哪個序列化程序選擇我的類。

所以這可能意味着,默認情況下,case類擴展Serializable並使這樣的工作作為默認設置:

serializers {
  kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
}

serialization-bindings {
  "java.io.Serializable" = kryo
}

但這只是一個有根據的猜測,目前我沒有可能進行測試。

我這樣做的方法是讓我的所有可序列化類擴展SerializableTrait ,然后在我的綁定中,我只是指定我的特性使用自定義序列化器進行序列化。

akka.actor {
  serializers {
    json-serializer = "io.example.MySerializerClass"
 }
  serialization-bindings {
   "io.example.SerializableTrait" = json-serializer
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM