zoukankan      html  css  js  c++  java
  • Akka Serialization

    Akka本身使用了Protocol Buffers来序列化内部消息(比如gossip message)。Akka系统还可以配置自定义序列化机制。

    配置conf

    akka {
      actor {
        ## 在akka.actor.serializers中声明有哪些序列化方式
        serializers {
          java = "akka.serialization.JavaSerializer"
          proto = "akka.remote.serialization.ProtobufSerializer"
        }
        ## 在akka.actor.serialization-bindings中说明哪些类(基类或者接口)需要使用哪个特定的序列器
        ## 仅仅需要声明哪些接口或者抽象类
        ## 一个类的多个父类(接口)分别声明了不同的序列器,那么采用他们的最大公告s父类所使用的序列器
        serialization-bindings {
          "java.lang.String" = java
          "nathan.Frequency" = proto ##自定义trait
          "nathan.Frequency$" = proto ##自定义object
          "java.lang.Boolean" = proto
        }
      }
    }
    akka {
      actor {
        ## 序列化所有的消息(local actor和remote actor),可能在测试的时候使用
        serizlize-messages = on
      }
    }
    akka {
      actor {
        ## 序列化所有的Props(local和remote)
        serialize-creators = on
      }
    }
    

    默认的,在local actor之间(the same JVM)的消息是不会序列化的。可以通过akka.actor.serialize-message配置,来序列化所有消息(local和remote)。序列化所有的消息不回给性能带来提升,应当只在测试时使用。

    akka {
      actor {
        ## 序列化所有的消息(local actor和remote actor),可能在测试的时候使用
        serizlize-messages = on
      }
    }
    

    编程式手动获取类对应的序列器。

      val actorSystem = ActorSystem("akka1", ConfigFactory.load())
      val serialization = SerializationExtension(actorSystem)
      val original = "2122"
      val stringSerializer = serialization.findSerializerFor(original)
      val frequcecySerization =   serialization.findSerializerFor(Frequency)
    

    序列化某类的实例,得到Array[Byte]:

      val original = "2122"
      val stringSerializer = serialization.findSerializerFor(original)
      val array = stringSerializer.toBinary(original)
    

    反序列化Array[Byte]

      val back = stringSerializer.fromBinary(array, classOf[String]) //明确Class[_]
      println(back) //2122
      println(back.getClass) //class java.lang.String
    
      val back = stringSerializer.fromBinary(array)
      println(back) //2122
      println(back.getClass) //class java.lang.String
    
    知难行易
    原创博文,请勿转载
    我的又一个博客hangscer.win
  • 相关阅读:
    Ubuntu18.04+windows10双系统时间同步教程
    Ubuntu官方源
    Ubuntu 16.04下OLSR协议安装教程
    Ubuntu 18.04中的Vim编辑器的高级配置
    关于vue-cli的安装
    var与let、const的区别
    jq点击相册弹出弹窗并可以轮播相册效果
    css三角形上下左右实心空心尖角箭头
    leetcode-44. Wildcard Matching
    c++转换构造函数和类型转换函数
  • 原文地址:https://www.cnblogs.com/hangscer/p/8111285.html
Copyright © 2011-2022 走看看