akka实现的actor

定义一个 Actor 类

要定义自己的Actor类,需要继承 Actor 并实现receive 方法.

receive 方法需要定义一系列 case 语句(类型为 PartialFunction[Any, Unit]) 来描述你的Actor能够处理哪些消息,以及如何进行处理。

如下例:

  1. import akka.actor.Actor
  2. import akka.actor.Props
  3. import akka.event.Logging
  4. class MyActor extends Actor {
  5. val log = Logging(context.system, this)
  6. def receive = {
  7. case "test" ⇒ log.info("received test")
  8. case _ ⇒ log.info("received unknown message")
  9. }
  10. }

需要提供一个接受的所有消息的模式匹配规则,如果你希望处理未知的消息,你需要象上例一样提供一个缺省的case分支。否则会有一个 akka.actor.UnhandledMessage(message, sender, recipient) 被发布到 Actor系统(ActorSystem)‘的 事件流(EventStream)中。

时间: 2024-10-13 01:15:39

akka实现的actor的相关文章

Akka实战 2 ---- actor的path和ref

user 是一个actor system所有actor的祖先 akka://HelloSystem  叫做 athority part user/helloactor 叫做 path part 打印ref 后面多了一个数字,这个数字是actor的UID, 就像你的***上除了你的名字又多了一个***号一样. 有时,你需要与一个还没出生的actor对话,或与一个你无法联系到的actor对话. 你知道它在那个actor system,这个sysyterm的ip和端口,这个actor是谁的孩子. 为了

akka设计模式系列-actor锚定

actor锚定模式是指使用actorSelection对acor进行锚定的设计模式,也可以说是一个对actor的引用技巧.在某些情况下,我们可能需要能够根据Actor的path锚定对应的实例.简单来说就是,无论actor是因为异常导致的restart还是用户主动stop,然后再重新actorOf,只要actor的路径和name相同,我们都希望把消息发送给改Actor的一个实例.那我们来看一下actorSelection和ActorRef的使用区别. class AnchorActor exten

[scala] akka actor编程

Akka基础 Akka笔记之Actor简介  Akka中的Actor遵循Actor模型.你可以把Actor当作是人.这些人不会亲自去和别人交谈.他们只通过邮件来交流.  1. 消息传递 2. 并发 3. 异常处理 4. 多任务 5. 消息链 Akka笔记之消息传递 消息发送给actor代理: 消息是不可变对象(可带有属性的case class): 分发器dispatcher和邮箱: dispatcher从actorRef取出一条消息放在目标actor邮箱中,然后放mailbox放在一个Threa

Akka 2 Actor 源码

Actor源码研究,先附上源码 // ...... object Actor {   /**    * Type alias representing a Receive-expression for Akka Actors.    */   //#receive   type Receive = PartialFunction[Any, Unit]   //#receive   /**    * emptyBehavior is a Receive-expression that matche

一 Akka学习 - actor

(引用 http://shiyanjun.cn/archives/1168.html) 一: 什么是Akka? Akka是JAVA虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,是一个框架.Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口. Akka处理并发的方法基于Actor模型.在Akka里,Actor之间通信的唯一机制就是消息传递. 二: 什么是Actor? 维基百科这样定义Actor模型: 在计算科学领域,Actor模型是一个并行计算(Concurr

Akka源码分析-Actor&ActorContext&ActorRef&ActorCell

分析源码的过程中我们发现,Akka出现了Actor.ActorRef.ActorCell.ActorContext等几个相似的概念,它们之间究竟有什么区别和联系呢? /** * Actor base trait that should be extended by or mixed to create an Actor with the semantics of the 'Actor Model': * <a href="http://en.wikipedia.org/wiki/Actor

Actor模型-Akka

英文原文链接,译文链接,原文作者:Arun Manivannan ,译者:有孚 写过多线程的人都不会否认,多线程应用的维护是件多么困难和痛苦的事.我说的是维护,这是因为开始的时候还很简单,一旦你看到性能得到提升就会欢呼雀跃.然而,当你发现很难从子任务的错误中恢复或者有些僵尸BUG很难复现再或者你的分析器显示你的线程在写入一个共享状态前大部分时间都浪费在阻塞上面的时候,痛苦降临了. 我刻意没提Java的并发API,以及它里面的集合类使得多线程编程变得多么轻松简单,因为我相信既然你们点进了这篇文章,

Akka框架使用注意点

1.mailbox Akka的每个actor默认有一个mailbox,按照FIFO顺序单线程处理.在抛出异常导致父actor根据设置的监管策略执行重启或恢复操作时,会从触发异常的消息的后续消息开始处理,邮箱并不会被清空.如果你想重新处理那个触发异常的消息,可以通过重写preRestart方法来访问该消息,java 中的preRestart参数为(Throwable reason, Option<Object> message),message.get()可以获得该消息(因为是从Option对象

Akka咋设计:我猜,我猜,我猜猜猜

假如我要设一个像Akka一样的actor框架,该怎么设计呢? 猜猜看,看有哪些问题需要考虑. 对于actor模型来说,最重要的就是actor. 如果把每个actor构造成一个线程,会简单得多,但是线程的数目必须很少,而actor的数目很多,因此对于一个通用的actor框架,不可能每个actor分配一个线程.所以,actor必须是由别的组件驱动的,有一个不停运转的组件来在actor之间分发消息,也需要有别的组件在另外的线程中处理actor的启动,停止,deathWatch等事件. 那么,是什么驱动