java中使用akka手记一
来源:互联网 发布:android 珍藏源码 编辑:程序博客网 时间:2024/05/20 02:27
什么是actor?
- Actor模型在并发编程中是比较常见的一种模型。很多开发语言都提供了原生的Actor模型。例如erlang,scala等。
- 它由Carl Hewitt于上世纪70年代早期提出,目的是为了解决分布式编程中一系列的编程问题。
- Actor模型的本质已经被强调了无数遍:万物皆Actor。Actor之间只有发送消息这一种通信方式。
- 一个Actor如何处理多个Actor的请求呢?它先建立一个消息队列,每次收到消息后,就放入队列,而它每次也从队列中取出消息体来处理。通常我们都使得这个过程是循环的。让Actor可以时刻处理发送来的消息。
什么是akka?
Akka是一个用Scala编写的库,用于简化编写容错的、高可伸缩性的Java和Scala的Actor模型应用。
- 下面以在java项目中使用akka写代码为例子。
依赖
- maven项目
- java6 or 7
- 添加akka相关的包
<dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.10</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-remote_2.10</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-testkit_2.10</artifactId> <version>2.3.1</version> </dependency>
依赖包解析
- akka-actor 核心包,有这个包就可以写简单的代码了
- akka-remote 远程包,有这个包,才能够跨进程和网络调用
- protobuf-java 不解释了,之所有是要声明版本,是因为pb的版本太低会造成消息传递过程中序列化反序列化有问题
- akka-testkit 测试集,有这个包,写test case方便
常见问题
- Q:shutting down JVM since ‘akka.jvm-exit-on-fatal-error’ is enabled
- A:所有出错的时候都会有这个提示,快速错误退出是一个常见的机制,让系统最快时间发现错误。
- Q:java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider
- A:没有添加进来akka-remote的时候会这样
- Q:class akka.remote.WireFormats$AkkaControlMessage overrides final method getUnknownFields.()Lcom/google/protobuf/UnknownFieldSet
- A:这是pb版本太低导致的,声明到2.5.0或以上
例子
- 这是typesafe的经典例子。
- 所有actor的配置都在classpath中。
- 此例启动了两个system(简称为worker与creator):startRemoteWorkerSystem && startRemoteCreationSystem
- worker使用calculator.conf,在2552端口侦听。
- creator使用remotecreation.conf,定义了它的worker在远程的2552端口,路径在creationActor下,自己的端口为2554。
creator中的逻辑
- creator启动后,调用了schedule,进行了一秒一次的随机调用乘法或除法。
- 具体的计算,在creationActor这个actor中完成。
- 而creationActor这个actor被定义到了远程2552端口的进程中执行。
akka { actor { deployment { "/creationActor/*" { remote = "akka.tcp://CalculatorWorkerSystem@127.0.0.1:2552" } } }
运行中进程观察
- run CreationApplication.java
- 一个进程 启动了一个端口
- 进程通过这个端口,产生随机算式,交给另一个进程(这里是同一个进程)。
代码
- 本文提及代码在 https://github.com/XiaoMi/rose/tree/master/rose-example
原创文章如转载,请注明:转载自五四陈科学院[ http://www.54chen.com ]
0 0
- java中使用akka手记一
- java中使用akka手记一
- java中使用akka手记三 cluster详例
- AAA Java中使用akka
- 使用Akka构建集群(一)
- 使用Akka构建集群(一)
- 【Akka】在并发程序中使用Future
- akka-http中使用websocket方法详解
- akka使用
- jdk 手记一 (java.lang)
- java学习手记(一)
- AKKA,java
- Scala Akka akka-java-spring
- 使用Akka实现一个简单的RPC框架(一)
- Akka 实践(一)Akka基础
- Akka 实践(一)Akka基础
- Akka 【一】 HelloWorld
- Akka边学边写(一)
- strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
- w3c标准
- platform设备驱动(Linux驱动4)
- 《PCL点云库学习&VS2010(X64)》Part 23 快速双边滤波算法之三线插值
- R语言的简单图的绘制
- java中使用akka手记一
- 以图搜图--感知哈希算法
- 使用Navicat进行ssh通道连接MySQL数据库
- 你看得懂的海明码校验和纠错原理
- 汽车租赁系统
- 华为oj初级 求最大连续bit数
- 使用反射实现通用的POI导出Excel
- 细思极恐-你真的会写java吗?
- 汐月教育之理解TensorFlow(六)API记录