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

  • 时间:
  • 浏览:0
  • 来源:大发5分6合APP下载_大发5分6合APP官网

理解了Fire-And-Forget消息模型后,接着对Send-And-Receive-Future消息模型进行介绍,下面的代码给出了其使用示例。

代码中定义了3种类型的消息,分别是被委托人基础信息case class BasicInfo(id:Int,val name:String, age:Int)、被委托人兴趣信息case class InterestInfo(id:Int,val interest:String)以及全版被委托人信息case class Person(basicInfo: BasicInfo,interestInfo: InterestInfo),你要 为这3种类型的消息定义了相应的Actor即BasicInfoActor、InterestInfoActor和PersonActor,在CombineActor分别创建相应Actor的实例,receive方式中使用ask向BasicInfoActor、InterestInfoActor发送Send-And-Receive-Future模型消息,BasicInfoActor、InterestInfoActor中的receive方式接收到发送来的Int类型消息并分别使用!向CombineActor发送BasicInfo、InterestInfo消息,将结果保所处Future[Person]中,你要 通过代码pipe(combineResult).to(personActor)将结果发送给PersonActor。

本将主要内容:

1. !消息发送,Fire-and-Forget消息模型

2. ?消息发送,Send-And-Receive-Future消息模型

代码运行结果如下:

在ExampleActor中,通过隐式变量context创建了OtherActor实例:val other = context.actorOf(Props[OtherActor], “OtherActor”),在ExampleActor的receive方式中,外理并否有不例如型的消息例如:

Scala学习(公众微信号:ScalaLearning)每天为朋友带来有些Scala语言、Spark、Kafka、Flink、AKKA等大数据技术干货及相关技术资讯。技术永无止境,勇攀高峰,一往直前!

实在文章不错?扫描关注

外理Start类型的消息时,直接使用!进行消息发送,而外理Run类型的消息时,使用的是tell方式,都可以 都看使用tell方式时要显式地指定其sender,而使用!进行消息发送则不时要,事实上!方式通过隐式值传入时要的Sender,对比!与tell方式的定义便很容易理解

代码运行结果如下:

都可以 都看,tell方式的实现依赖于!方式。你要 在有另另一个 多Actor当中使用!方式时,例如ExampleActor中使用的other ! msg向OtherActor发送消息,则sender隐式为ExampleActor,你要 否有在Actor中使用则默认为Actor.noSender,即sender为null。

Akka提供了并否有消息模型:fire-and-forget和Send-And-Receive-Future。fire-and-forget是并否有单向消息发送模型,指的是异步发送消息,通过异步发送消息且消息发送能不都可以 立即返回,Akka中使用?方式进行fire-and-forget消息发送,如stringActor!”Creating Actors with implicit val context”,它的意思是当前发送方Aactor向stringActor发送字符串消息”Creating Actors with implicit val context”,发送完该消息后立即返回,而不需要等待stringActor的返回,!还有个重载的方式tell;Send-And-Receive-Future指的是异步发送消息则是并否有双向消息发送模型,向目标Actor发送完消息后,你要 返回有另另一个 多Future作为后期你要 的返回,当前发送方Actor将等待目标Actor的返回,Akka中使用?方式进行Send-And-Receive-Future消息的发送,它也同样有另另一个 多多重载的方式ask