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
Akka Serialization的更多相关文章
- Akka源码分析-Serialization
今天我们来谈一下akka的序列化框架,其实序列化.反序列化是一个老生常谈的问题,那么我们为什么还要研究一下akka的序列化框架呢?不就是使用哪种序列化.反序列化方法的区别么?其实刚开始的时候我也是这么 ...
- akka简单示例-1
刚刚开始接触akka,网上找了2个简单示例,并在公司运营机器上尝试,踩了一些坑,在此记录. 1. 本地hello world [torstan@sparkb5-i ~/akka_example/hel ...
- Akka(15): 持久化模式:AtLeastOnceDelivery-消息保证送达模式
消息保证送达是指消息发送方保证在任何情况下都会至少一次确定的消息送达.AtleastOnceDelivery是一个独立的trait,主要作用是对不确定已送达的消息进行补发,这是一种自动的操作,无需用户 ...
- ScalaPB(1): using protobuf in akka
任何类型的实例作为消息在两端独立系统的机器之间进行传递时必须经过序列化/反序列化serialize/deserialize处理过程.假设以下场景:在一个网络里有两台连接的服务器,它们分别部署了独立的a ...
- Akka源码分析-Persistence-AtLeastOnceDelivery
使用过akka的应该都知道,默认情况下,消息是按照最多一次发送的,也就是tell函数会尽量把消息发送出去,如果发送失败,不会重发.但有些业务场景,消息的发送需要满足最少一次,也就是至少要成功发送一次. ...
- Akka源码分析-Remote-位置透明
上一篇博客中,我们研究了remote模式下如何发消息给远程actor,其实无论如何,最终都是通过RemoteActorRef来发送消息的.另外官网也明确说明了,ActorRef是可以忽略网络位置的,这 ...
- akka框架——异步非阻塞高并发处理框架
akka actor, akka cluster akka是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模 ...
- Akka系列(九):Akka分布式之Akka Remote
前言.... Akka作为一个天生用于构建分布式应用的工具,当然提供了用于分布式组件即Akka Remote,那么我们就来看看如何用Akka Remote以及Akka Serialization来构建 ...
- Akka Typed 官方文档之随手记
️ 引言 近两年,一直在折腾用FP与OO共存的编程语言Scala,采取以函数式编程为主的方式,结合TDD和BDD的手段,采用Domain Driven Design的方法学,去构造DDDD应用(Dom ...
随机推荐
- Sublime Text 3 修改配色方案
你可能会觉得 Sublime Text 配色方案的颜色(注释.背景色)看起来不习惯,其他都满意.此时我们可以自己修改这些配色,不需要更换整个配色方案. 需要安装 PackageResourceView ...
- 《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService
AbstractExecutorService对ExecutorService的执行任务类型的方法提供了一个默认实现.这些方法包括submit,invokeAny和InvokeAll. 注意的是来自E ...
- ChatterBot之使用mongodb 03
上一篇我们已经搭建好了mongodb环境,本篇为简单示例. 废话不多说先上代码然后开始讲解; !!!别忘了打开你的mongdb服务!!!,如果没有mongodb请看上篇如何安装mongodb; # - ...
- git学习——Github关联(2)
一.参考学习链接 1.重点看Github与Git的关联. http://www.cnblogs.com/schaepher/p/5561193.html#github 2.git的全面详细介绍. ht ...
- MySQL管理员珍藏:十大必备工具盘点
作者:dongdongzzcs 第1页: [IT168 专稿]本文的作者Daniel Nichter是MySQL工具的开发者,他为MySQL管理员推荐了十款必备工具.以下是全文内容: MySQL是一套 ...
- 一个三维点类Gpoint3的实现
1 类设计 基本功能 (1)默认构造时,自动初始化为(0,0,0): (2)支持点之间的加.减运算: (3)支持点与常量数据的加.减.乘除运算: (4)支持点之间的相等或不能判断 (5)如果把点类看作 ...
- 深入理解java虚拟机----->垃圾收集器与内存分配策略(下)
1. 前言 内存分配与回收策略 JVM堆的结构分析(新生代.老年代.永久代) 对象优先在Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保 2. 垃圾 ...
- 【Win 10 应用开发】MIDI 音乐合成——乐理篇
针对 MIDI 音乐的 API ,其实在 Win 8.1 的时候就出现.在UWP中采用了新的驱动模式,MIDI 消息传递更加高效. 首先得说明的是,UWP 的 MIDI 相关 API 不是针对 MID ...
- 来自Ext的UI边界识别函数constrain
//constrain函数 var min = 1 var max = 3; var num = 4; var result = Math.min(Math.max(num,min),max); co ...
- Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结
Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...