• 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
  • 相关阅读:
    浅谈求卡特兰数的几种方法
    WPF基础知识、界面布局及控件Binding
    .net平台下C#socket通信(上)
    .net泛型理解
    面向过程和面向对象及面向对象的三大特征
    C#配置文件管理
    MOGRE学习笔记(3)--MOGRE小项目练习
    委托、事件学习笔记
    MOGRE学习笔记(2)
    MOGRE学习笔记(1)
  • 原文地址:https://www.cnblogs.com/hangscer/p/8111285.html
Copyright © 2020-2023  润新知