Akka 4 akka的Actor模型

1. What is an Actor?

The Actor Model represents objects and their interactions, resembling

human organizations and built upon the laws of physics.

is an object with identity

has a behavior

only interacts using asynchronous message passing

2. The Actor Trait

type Receive = PartialFunction[Any, Unit]

trait Actor {

def receive: Receive

...

}

The Actor type describes the behavior of an Actor, its response to

messages.

3.A Simple Actor

class Counter extends Actor {

var count = 0

def receive = {

case ”incr” => count += 1

}

}

This object does not exhibit stateful behavior 不展示任何状态的actor

4. Making it Stateful 让它有状态

Actors can send messages to addresses (ActorRef) they know(Actor可以给它知道的Actor发消息):

class Counter extends Actor {

var count = 0

def receive = {

case ”incr” => count += 1

case (”get”, customer: ActorRef) => customer ! count

}

}

5.

How Messages are Sent

trait Actor {

implicit val self: ActorRef

def sender: ActorRef

...

}

abstract class ActorRef {

def !(msg: Any)(implicit sender: ActorRef = Actor.noSender): Unit

def tell(msg: Any, sender: ActorRef) = this.!(msg)(sender)

...

}

Sending a message from one actor to the other picks up the sender’s

address implicitly。 sender的地址会自动传递给receiver

6. 使用sender方法发message

Using the Sender

class Counter extends Actor {

var count = 0

def receive = {

case ”incr” => count += 1

case ”get” => sender ! count

}

}

7. Actor上下文定义了become和unbecome方法,可以改变actor的行为

The Actor’s Context

The Actor type describes the behavior, the execution is done by its

ActorContext.

trait ActorContext {

def become(behavior: Receive, discardOld: Boolean = true): Unit

def unbecome(): Unit

...

}

trait Actor {

implicit val context: ActorContext

...

}

8.改变Actor的行为

Changing an Actor’s Behavior

class Counter extends Actor {

def counter(n: Int): Receive = {

case ”incr” => context.become(counter(n + 1))

case ”get” => sender ! n

}

def receive = counter(0)

}

9.使用context 的 actorOf方法创建actor和storp方法停止Actor

Creating and Stopping Actors

trait ActorContext {

def actorOf(p: Props, name: String): ActorRef

def stop(a: ActorRef): Unit

...

}

Actors are created by actors.

“stop” is often applied to “self”.

10. 完整示例

package week5

import akka.actor.Actor
import akka.actor.Props

class CounterMain extends Actor {
  val counter = context.actorOf(Props[Counter], "counter")

  counter ! "incr"
  counter ! "incr"
  counter ! "get"

  def receive = {
    case count: Int =>
      println(s"count was $count")
      context.stop(self)
  }
}
package week5

import akka.actor.Actor

class Counter extends Actor {
  var count = 0
  def receive = {
    case "incr" => count += 1
    case "get"  => sender ! count
  }
}

Props[Counter]  ----- Counter为我们下面定义的Actor类

counter ----  为这个新的Actor的名字

11. Actor在收到消息之后,可以做下面这些事

Upon reception of a message the actor can do any combination of the

following:

send messages   发消息

create actors   创建Actor

designate the behavior for the next message  设计收到下一条消息后的行为逻辑

时间: 2024-11-08 16:37:35

Akka 4 akka的Actor模型的相关文章

Akka v2.4-ARTERY-M4,Actor 模型开发库

Akka v2.4-ARTERY-M4 发布了.Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java和 Scala 的 Actor 模型应用. 暂未发现该版本更新内容,点击下面链接保持关注更新: http://akka.io/news/ https://github.com/akka/akka/releases/tag/v2.4-ARTERY-M4 https://github.com/akka/akka/compare/v2.4-ARTERY-M4...mast

Akka 编程: 什么是Actor

上一篇我们简单介绍了Actor系统,说明了Actor之间存在着层次关系,它也是构成Actor应用的最基本的单位.本篇介绍Actor本身的一些基本概念.一个Actor包含了State(状态),Behavior(行为),一个Mailbox(邮箱)和Supervisor Strategy (管理员策略),所有这些都封装在一个Actor引用之中(Actor Reference).Actor 引用一个Actor对象需要和外界隔离开来才能构成一个Actor模型,因此从外部看,一个Actor对象由一个Acto

在.NET中实现Actor模型的不同方式

上周,<实现领域驱动设计>(Implementing Domain-Driven Design)一书的作者Vaughn Vernon,发布了Dotsero,这是一个使用C#编写的.基于.NET的Actor模型工具包,它的实现参考了Akka API.Akka工具包是对Actor模型的一种实现,目前为止已经有对应Java和Scala版本的API. 今年早些时候,微软Research部门也发布了一个基于Actor模型的框架,Orleans框架的预览版.这个框架采用了云端编程模型,编写这个框架的目的在

Akka并发编程——第七节:Actor模型(六)

主要内容: 1. Typed Actor定义 2. Typed Actor创建 3. 消息发送 1. Typed Actor定义 Akka中的Typed Actor是Active Objects设计模式的实现,Active Objects模式将方法的执行和方法的调用进行解耦合,从而为程序引入并发性.Typed Actor由公用的接口和对应实现两部分构成,其后面深层次的实现使用的是代理模式,即通过使用JDK中的动态代理来实现,在调用接口的方法时自动分发到实现接口的对象上.Typed Actor的定

Actor模型-Akka

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

Akka 3 Akka actor 与 scala actor的不同

经常有人问: Akka的Actor和Scala的Actor有什么不同?这里的回答是,从actor 模型角度讲,没什么不同,它们都实现了actor model. Akka actors and Scala actors are two implementations of that model. All Actor model says that your concurrency primitives are actors, which can: receive a message and dec

akka入门-调用子Actor处理消息

程序演示了父子结构的Actor处理消息.父Actor接收到消息后调用子Actor处理. 1.创建父子Actor import java.util.UUID; import com.center.akka.simple.command.Command; import com.center.akka.simple.event.Event; import akka.actor.ActorRef; import akka.actor.Props; import akka.actor.UntypedAct

Akka源码分析-Actor&amp;ActorContext&amp;ActorRef&amp;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

.NET的Actor模型:Orleans

Orleans是微软推出的类似Scala Akka的Actor模型,Orleans是一个建立在.NET之上的,设计的目标是为了方便程序员开发需要大规模扩展的云服务, 可用于实现DDD+EventSourcing/CQRS系统. 传统的三层体系结构包括无状态的前端,无状态的中间层和存储层在可伸缩性方面是有限制的,由于存储层在延迟和吞吐量方面的限制,这对于每个用户请求都有影响.通常办法是在中间层和存储层之间添加缓存层来提高性能.然而,缓存会失去了大部分的并发性和底层存储层的语义保证.为了防止缓存和存

【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型

一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类. Actor相当于Java中的多线程. 二.具体阐述 trait特性 1.概念理解 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 与接口不同的是,它还可以定义属性和方法的实现. 一般情况下Scala的类可以继承多个Tra