actor框架-Akka

一、简介

Akka的actor是对actor模型的实现,下面的例子中使用简单的demo说明akka的actor的用法(作为jar包使用,akka也可以作为单独的服务使用而且很强大),akka的scala版本使用起来比较简洁,但是java版的就有点略显繁琐。

二、示例

1、maven配置:下载下来的jar包除了akka-actor还有依赖包scala-library和config

		<dependency>
			<groupId>com.typesafe.akka</groupId>
			<artifactId>akka-actor_2.10</artifactId>
			<version>2.2.4</version>
		</dependency>

2、定义actor并重写里边的生命周期方法(方便观察生命周期),和消息处理方法

import scala.Option;
import akka.actor.UntypedActor;

public class HelloWorld extends UntypedActor {
	@Override
	public void preStart() {
		System.out.println("===preStart");
	}
	@Override
	public void preRestart(Throwable reason, Option<Object> message) throws Exception {
		System.out.println("===preRestart");
		super.preRestart(reason, message);
	}
	@Override
	public void postRestart(Throwable reason) throws Exception {
		System.out.println("===postRestart");
		super.postRestart(reason);
	}
	@Override
	public void postStop() throws Exception {
		System.out.println("===postStop");
		super.postStop();
	}
	@Override
	public void onReceive(Object msg) {
		if (msg.toString().equals("hello")) {
			System.out.println("----" + msg);
			// getContext().stop(getSelf());
		} else {
			// 导致崩溃,actor会自动重启
			System.out.println(3 / 0);
			// unhandled(msg);
		}
	}
}
3、启动actor的入口类

import akka.actor.ActorRef;
import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.akka.actor.HelloWorld;
public class App {
	public static void main(String[] args) throws InterruptedException {
		ActorSystem system = ActorSystem.create("akka");
		ActorRef rcActor = system.actorOf(Props.create(HelloWorld.class), "helloWorld");
		rcActor.tell("hi", ActorRef.noSender());
		//Thread.sleep(3000);
		//Actor树
		ActorSelection as = system.actorSelection("/user/helloWorld");
		as.tell("hello", ActorRef.noSender());
	}
}

三、结果

===preStart
===preRestart
===postStop
===postRestart
===preStart
----hello
[ERROR] [03/17/2014 17:31:00.919] [akka-akka.actor.default-dispatcher-2] [akka://akka/user/helloWorld] / by zero
java.lang.ArithmeticException: / by zero ...  ....

启动时调用了preStart方法

因为消息处理导致崩溃,akka停止处理消息并自动重启(preRestart -->  preStart)

重启之后可以继续处理mailbox中的消息
输出的日志信息并不是异常出现的位置,是因为akka的日志处理本身也是交由actor(/system)处理,是异步的

内容简介 本书将尝试帮助入门级、中级以及高级读者理解基本的分布式计算概念,并且展示 如何使用 Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。本书将介绍各种概念,帮助读者理解 网络上各系统进行交互的困难之处,并介绍如何使用 Akka 提供的解决方案来解决这些 问题。 作者简介 Jason Goodwin 是一个基本上通过自学成才的开发者。他颇具企业家精神,在学校 学习商学。不过他从 15 岁起就开始学习编程,并且一直对技术保持着浓厚的兴趣。这对 他的职业生涯产生了重要的影响,从商学转向了软件开发。现在他主要从事大规模分布 式系统的开发。在业余时间,他喜欢自己原创电子音乐。 他在 mDialog 公司第一次接触到 Akka 项目。mDialog 是一家使用 Scala/Akka 的公司, 为主流出版商提供视频广告插入软件。这家公司最终被 Google 收购。他同时还是一名很 有影响力的“技术控”,将 Akka 引入加拿大一家主要的电信公司,帮助该公司为客户提 供容错性更高、响应更及时的软件。除此之 外,他还为该公司中的一些团队教授 Akka、 函数式以及并发编程等知识。 目录 第 1 章 初识 ActorAkka 工具集以及 Actor 模型的介绍。 第 2 章 Actor 与并发:响应式编程。Actor 与 Future 的使用。 第 3 章 传递消息:消息传递模式。 第 4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。 第 5 章 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞 I/O 的处理以 及 API。 第 6 章 横向扩展—集群化:集群、CAP 理论以及 Akka Cluster。 第 7 章 处理邮箱问题:加大邮箱负载、不同邮箱的选择、熔断机制。 第 8 章 测试与设计:行为说明、领域驱动设计以及 Akka Testkit。 第 9 章 尾声:其他 Akka 特性。下一步需要学习的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值