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

Akka Serialization的更多相关文章

  1. Akka源码分析-Serialization

    今天我们来谈一下akka的序列化框架,其实序列化.反序列化是一个老生常谈的问题,那么我们为什么还要研究一下akka的序列化框架呢?不就是使用哪种序列化.反序列化方法的区别么?其实刚开始的时候我也是这么 ...

  2. akka简单示例-1

    刚刚开始接触akka,网上找了2个简单示例,并在公司运营机器上尝试,踩了一些坑,在此记录. 1. 本地hello world [torstan@sparkb5-i ~/akka_example/hel ...

  3. Akka(15): 持久化模式:AtLeastOnceDelivery-消息保证送达模式

    消息保证送达是指消息发送方保证在任何情况下都会至少一次确定的消息送达.AtleastOnceDelivery是一个独立的trait,主要作用是对不确定已送达的消息进行补发,这是一种自动的操作,无需用户 ...

  4. ScalaPB(1): using protobuf in akka

    任何类型的实例作为消息在两端独立系统的机器之间进行传递时必须经过序列化/反序列化serialize/deserialize处理过程.假设以下场景:在一个网络里有两台连接的服务器,它们分别部署了独立的a ...

  5. Akka源码分析-Persistence-AtLeastOnceDelivery

    使用过akka的应该都知道,默认情况下,消息是按照最多一次发送的,也就是tell函数会尽量把消息发送出去,如果发送失败,不会重发.但有些业务场景,消息的发送需要满足最少一次,也就是至少要成功发送一次. ...

  6. Akka源码分析-Remote-位置透明

    上一篇博客中,我们研究了remote模式下如何发消息给远程actor,其实无论如何,最终都是通过RemoteActorRef来发送消息的.另外官网也明确说明了,ActorRef是可以忽略网络位置的,这 ...

  7. akka框架——异步非阻塞高并发处理框架

    akka actor, akka cluster akka是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模 ...

  8. Akka系列(九):Akka分布式之Akka Remote

    前言.... Akka作为一个天生用于构建分布式应用的工具,当然提供了用于分布式组件即Akka Remote,那么我们就来看看如何用Akka Remote以及Akka Serialization来构建 ...

  9. Akka Typed 官方文档之随手记

    ️ 引言 近两年,一直在折腾用FP与OO共存的编程语言Scala,采取以函数式编程为主的方式,结合TDD和BDD的手段,采用Domain Driven Design的方法学,去构造DDDD应用(Dom ...

随机推荐

  1. Java学习笔记12---向上转型-父类的对象引用指向子类对象

    当父类的对象引用没有指向父类的对象,而是指向了子类的对象时,调用方法或访问变量时会怎样呢? 假设父类为Person,子类为Student,有下面的两行定义: Student sTest = new S ...

  2. 学习MySQL(下)

    具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...

  3. Linux下安装Redis php-redis扩展 redis重启shell脚本 超详细!

    前言 前面刚写过nosql其中三款热门产品的对比,这次主要写关于Redis的一些事情,Redis的介绍.安装以及扩展(php-redis,因为我是phper)安装等等.同时是写给我的朋友(cccjjj ...

  4. C语言之浮点数

    #include<stdio.h> int main(){printf("请分别输入身高的英尺和英寸," "如输入\"5 7\"表示5英尺 ...

  5. Centos 安装boost库

    1.在http://www.boost.org/下载boost安装包boost_1_65_1.tar.gz 2.在Centos上解压tar -zxvf  boost_1_65_1.tar.gz后,cd ...

  6. 虚拟机创建流程中neutron代码分析(二)

    前言: 当nova服务发送了创建port的restful调用信息之后,在neutron服务中有相应的处理函数来处理调用.根据restful的工作原理,是按照 paste.ini文件中配置好的流程去处理 ...

  7. Python测试开发之---list、str、dict、tuple小结

    str的常用方法有: str.digits 0-9的表示str.uppercase 大写字母str.lowercase 小写字母str.letters 所有字母" ".join(s ...

  8. 使用anyproxy 来抓取手机的数据包

    简单介绍Anyproxy Anyproxy 是alibaba 前端团队开源的http/https 的代理工具 官网地址:http://anyproxy.io/cn/ 环境要求:需要安装nodejs 提 ...

  9. 来个Button看一看

    0.目录 1.前言 2.基本属性与方法 3.点点更健康 4.我的Button有点多 5.震惊!TextView竟然... 1.前言 每次写代码总会忘记一些东西,又要重新Goooooooooogle,好 ...

  10. centos7 简单搭建lnmp环境

    1:查看环境: 1 2 [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 1 [r ...