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

  • 时间:
  • 浏览:1

主要内容:

1. Typed Actor定义

2. Typed Actor创建

3. 消息发送

代码运行结果如下:

[INFO] [03/21/2016 21:15:500.592] [main] [Example12_9(akka://TypedActorSystem)]oSquare=Some(5000)[INFO][03/21/201621:15:500.649][main][Example129(akka://TypedActorSystem)] iSquare=5000

[INFO] [03/21/2016 21:15:500.649] [main] [Example12_9$(akka://TypedActorSystem)] fSquare=5000

后面 代码演示的是使用构造函数和非默认构造函数创建Typed Actor,其中Squarer为代理的类型,SquarerImpl为具体实现的类型。

代码mySquarer.squareDontCare(10)是单向消息发送,法律妙招将在另外一有有有六个应用守护进程上异步地执行;val oSquare = mySquarer.squareNowPlease(10)、val iSquare = mySquarer.squareNow(10)为Request-reply消息发送,在特定时间内以阻塞的法律妙招执行,对于.squareNowPlease(10)法律妙招将会在对应时间内没有返回结果则返回值为None,而且返回值为Option[Int]类型,对于squareNow(10)法律妙招将会在对应时间内无返回值则会抛出异常java.util.concurrent.TimeoutException,而且返回Int类型值;val fSquare = mySquarer.square(10)为Request-reply-with-future式的消息发送,以非阻塞的法律妙招执行,还都还都可以通过val result = Await.result(fSquare, 5 second)获取执行结果。删剪代码如下所示。

Akka中的Typed Actor是Active Objects设计模式的实现,Active Objects模式将法律妙招的执行和法律妙招的调用进行解耦合,从而为应用守护进程引入并发性。Typed Actor由公用的接口和对应实现两主次构成,其后面 深度1次的实现使用的是代理模式,即通过使用JDK中的动态代理来实现,在调用接口的法律妙招时自动派发到实现接口的对象上。Typed Actor的定义[ ]如下所示。

trait Squarer中定义了有有有六个法律妙招:

(1)def squareDontCare(i: Int): Unit法律妙招:返回值类型为Unit,它类似Untyped Actor中的fire-and-forget消息发送模型,即!和tell法律妙招调用。

(2)def square(i: Int): Future[Int]:返回值类型为Future[Int],它类似Untyped Actor中的send-request-reply消息发送模型,即?和ask法律妙招调用,此种调用是非阻塞的。

(3)def squareNowPlease(i: Int): Option[Int]:返回值类型为Option[Int](Option类还都还都可以是scala.Option[_]都还上都还都可以是akka.japi.Option

通过下列代码创建Typed Actor实例。