Hello,Akka
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://www.blogbus.com/dreamhead-logs/235916459.html
只要稍微了解过一些Scala,这门JVM上广受关注的程序设计语言,你一定会对其中的一个Actor特性印象深刻。Actor是另一种进行并发计算的方式。通过在不同的Actor之间彼此发送消息,我们会惊喜地发现,那令人纠结的锁将不再困扰我们。
不过,那是Scala的世界,作为一个Java程序员难道只有艳羡的份吗?显然不是。Akka把Actor带到了Java世界。
实际上,Akka主要是以Scala编写的,但它很好地支持Java API,让所有特性对于Java程序员也唾手可得。即使相比于与Scala内建的Actor,Akka也不遑多让。Akka除了最基本的Actor特性外,它可以能在多台机器上透明地实现Actor,此外,还提供了很好的监管特性,这些都是Scala内建的Actor所不具备的。
说了那么多,让我们用一个Hello的例子和Akka打个招呼吧!
既然我们这里关注的是Actor,我们就来实现两个Actor,让它们之间实现问候。下面是一个:
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.actor.ActorRef; public class HelloWorld extends UntypedActor { @Override
public void preStart() {
final ActorRef greeter =
getContext().actorOf(Props.create(Greeter.class), "greeter");
greeter.tell(Greeter.Msg.GREET, getSelf());
} @Override
public void onReceive(Object msg) {
if (msg == Greeter.Msg.DONE) {
getContext().stop(getSelf());
} else {
unhandled(msg);
}
}
}
(HelloWorld.java)
这个HelloWorld继承了UntypedActor,表明我们实现的是一个Actor。
其中的preStart是在启动这个Actor时调用的方法。在这里,我们创建了另一个Actor的实例。我们稍后会看到另一个Actor Greeter的实现。然后,我们调用tell方法给它发了一个消息,Greeter.Msg.GREET,后面的getSelf()给出了一个Actor的引用(ActorRef),用以表示发消息的Actor。这只是启动一个Actor,后面的部分才是更重要的。
onReceive方法是处理我们接收到消息的情况。这里我们看到,如果接收到的消息是一个Greeter.Msg.DONE,我们就会停下(stop)所有的处理,同样,getSelf()指明停下的目标,否则的话,就说我们没处理(unhandled)。
看完了一个Actor,或许你已经迫不及待地想看与它打交道的另一个Actor了,下面就是:
import akka.actor.UntypedActor;
public class Greeter extends UntypedActor {
public static enum Msg {
GREET, DONE
}
@Override
public void onReceive(Object msg) {
if (msg == Msg.GREET) {
System.out.println("Hello World!");
getSender().tell(Msg.DONE, getSelf());
} else {
unhandled(msg);
}
}
}
(Greeter.java)
同样的Actor结构,我们已经在HelloWorld类里面看到了。在onReceive方法里,如果它接收到的消息是Msg.GREET,它就打印出“Hello World!”,然后,给发送者回复一条Msg.DONE。没处理的话,就说没处理。
就是这么简单!
好,万事具备,我们把它跑起来。你看到了我们还没有入口点,实际上,Akka自身为我们提供了一个。设置好classpath之后,我们只要这样运行即可:
java akka.Main HelloWorld
这里的akka.Main就是我们的入口点,我们把HelloWorld这个类名传给它作为启动参数。运行的结果自然是我们最熟悉的:
Hello World!
好,就到这里吧!
Hello,Akka的更多相关文章
- Aaron Stannard谈Akka.NET 1.1
Akka.NET 1.1近日发布,带来新特性和性能提升.InfoQ采访了Akka.net维护者Aaron Stannard,了解更多有关Akka.Streams和Akka.Cluster的信息.Aar ...
- [翻译]AKKA笔记 - 有限状态机 -1
原文地址:http://rerun.me/2016/05/21/akka-notes-finite-state-machines-1/ 我最近有个机会在工作上使用了Akka FSM,是个非常有趣的例子 ...
- [翻译]AKKA笔记 - CHILD ACTORS与ACTORPATH -6
原文:http://rerun.me/2014/10/21/akka-notes-child-actors-and-path/ Actor是完全的继承结构.你创建的任何Actor肯定都是一个其他Act ...
- Spark如何使用Akka实现进程、节点通信的简明介绍
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...
- [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (二)
3.THROW IN A LOGBACK.XML 现在我们把SLF4J日志配置在logback. <?xml version="1.0" encoding="UTF ...
- Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境
目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...
- akka笔记
Actor UntypedActor actor的基类,继承并实现onReceive方法就可以得到一个Actor. Props 配置类,用Props.create可以创建一个按指定配置生成的Actor ...
- 分布式应用框架Akka快速入门
转自:http://blog.csdn.net/jmppok/article/details/17264495 本文结合网上一些资料,对他们进行整理,摘选和翻译而成,对Akka进行简要的说明.引用资料 ...
随机推荐
- 记一次SortedDictionary的不当使用
起初想用SortedDictionary做游戏中的排行榜,代码如下: using UnityEngine; using System; using System.Collections; using ...
- Windows上Python2.7安装Scrapy过程
需要执行: pip install scrapy pip install requests 在Windows下用pip安装Scrapy报如下错误,看错误提示就知道去http://aka.ms/vcpy ...
- C++运算法优先级
- Entity Framework 第三篇 实体特性声明
Entity Framework中对实体的特性声明有着严格的要求 1.实体必须要有主键特性,但是如果实体没有主键特性那怎么办? public int ExecuteSqlCommand(string ...
- 越狱后如何添加cydia源及cydia源大全
http://jingyan.baidu.com/article/6c67b1d6cc53fe2787bb1e06.html 软件游戏能PJ,插件其实也一样,所以有些源里面就包含了大量的PJ插件~ a ...
- nylg 小M的因子和
小M的因子和 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 小M在上课时有些得意忘形,老师想出道题目难住他.小M听说是求因子和,还是非常得意,但是看完题目是求A的B ...
- 南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
N! 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它.现在这里有一个问题,给定一个N(0< ...
- P2312 解方程
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- linux下如何安装配置redis及主从配置
redis的优点:支持主从备份,操作指令丰富,支持异步的数据持久化 将 redis 安装到 /usr/local/webserver/redis 1.下载安装包 wget http://redis.g ...
- 零零碎碎写的shell脚本(三):一键自动归档压缩脚本
#!/bin/bash # author by sysk read -p "There files: " FILE1 FILE2 FILE3 read -p "Desti ...