您的位置:首页 > 其它

Akka学习笔记:Actor消息处理-请求和响应(2)

2015-01-18 21:10 507 查看
接《Akka学习笔记:Actor消息处理-请求和响应(1)》

二、StudentActor对InitSignal消息作出反应,并且发送了QuoteRequest 消息给TeacherActor

四、StudentActor仅仅将QuoteResponse 作为日志打印到控制台/logger

  为什么我将二、四结合起来写?因为这两个很简单,如果我将他们分开来写,你肯定会讨厌我的!


如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
  第二块 – StudentActor接收来自DriverApp的InitSignal 消息,然后给TeacherActor发送一个QuoteRequest。
def receive = {
case InitSignal=> {
teacherActorRef!QuoteRequest
}
...
...
这就是第二步要做的!
  第四块,StudentActor将从TeacherActor接收到的消息记到日志里面


如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
代码如下:
case QuoteResponse(quoteString) => {
log.info ("Received QuoteResponse from Teacher")
log.info(s"Printing from Student Actor $quoteString")
}
 我同意你认为上面的代码看起来有点想伪代码。所以,StudentActor 的完整代码如下:
package me.rerun.akkanotes.messaging.requestresponse

import akka.actor.Actor
import akka.actor.ActorLogging
import me.rerun.akkanotes.messaging.protocols.TeacherProtocol._
import me.rerun.akkanotes.messaging.protocols.StudentProtocol._
import akka.actor.Props
import akka.actor.ActorRef

class StudentActor (teacherActorRef:ActorRef) extends Actor with ActorLogging {

def receive = {
case InitSignal=> {
teacherActorRef!QuoteRequest
}

case QuoteResponse(quoteString) => {
log.info ("Received QuoteResponse <span id="5_nwp" style="width: auto; height: auto; float: none;"><a id="5_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Eiteblog%2Ecom%2Farchives%2F1163&p=baidu&c=news&n=10&t=tpclicked3_hc&q=56075110_cpr&k=from&k0=printing&kdi0=8&k1=from&kdi1=8&k2=new&kdi2=8&k3=you&kdi3=8&k4=think&kdi4=8&sid=f729d76689a2b130&ch=0&tu=u1887734&jk=325f1da3f0be6e4f&cf=29&fv=16&stid=9&urlid=0&luki=2&seller_id=1&di=128" target="_blank" mpid="5" style="text-decoration: none;"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">from</span></a></span> Teacher")
log.info(s"Printing from Student Actor $quoteString")
}
}
}

三、TeacherActor用QuoteResponse作出了响应

  TeacherActor接收到了QuoteRequest消息,并且用QuoteResponse 作为响应
package me.rerun.akkanotes.messaging.requestresponse

import scala.util.Random

import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.actorRef2Scala
import me.rerun.akkanotes.messaging.protocols.TeacherProtocol._

class TeacherActor extends Actor with ActorLogging {

val quotes = List(
"Moderation is for cowards",
"Anything worth doing is worth overdoing",
"The trouble is <span id="2_nwp" style="width: auto; height: auto; float: none;"><a id="2_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Eiteblog%2Ecom%2Farchives%2F1163&p=baidu&c=news&n=10&t=tpclicked3_hc&q=56075110_cpr&k=you&k0=printing&kdi0=8&k1=from&kdi1=8&k2=new&kdi2=8&k3=you&kdi3=8&k4=think&kdi4=8&sid=f729d76689a2b130&ch=0&tu=u1887734&jk=325f1da3f0be6e4f&cf=29&fv=16&stid=9&urlid=0&luki=4&seller_id=1&di=128" target="_blank" mpid="2" style="text-decoration: none;"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">you</span></a></span> <span id="3_nwp" style="width: auto; height: auto; float: none;"><a id="3_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Eiteblog%2Ecom%2Farchives%2F1163&p=baidu&c=news&n=10&t=tpclicked3_hc&q=56075110_cpr&k=think&k0=printing&kdi0=8&k1=from&kdi1=8&k2=new&kdi2=8&k3=you&kdi3=8&k4=think&kdi4=8&sid=f729d76689a2b130&ch=0&tu=u1887734&jk=325f1da3f0be6e4f&cf=29&fv=16&stid=9&urlid=0&luki=5&seller_id=1&di=128" target="_blank" mpid="3" style="text-decoration: none;"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">think</span></a></span> you have time",
"You never gonna know if you never even try")

def receive = {

case QuoteRequest => {

import util.Random

//Get a random Quote <span id="4_nwp" style="width: auto; height: auto; float: none;"><a id="4_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Eiteblog%2Ecom%2Farchives%2F1163&p=baidu&c=news&n=10&t=tpclicked3_hc&q=56075110_cpr&k=from&k0=printing&kdi0=8&k1=from&kdi1=8&k2=new&kdi2=8&k3=you&kdi3=8&k4=think&kdi4=8&sid=f729d76689a2b130&ch=0&tu=u1887734&jk=325f1da3f0be6e4f&cf=29&fv=16&stid=9&urlid=0&luki=2&seller_id=1&di=128" target="_blank" mpid="4" style="text-decoration: none;"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">from</span></a></span> the list and construct a response
val quoteResponse = QuoteResponse(quotes(Random.nextInt(quotes.size)))

//respond back to the Student who is the original sender of QuoteRequest
sender ! quoteResponse

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: