注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

akka 发送消息有两种模式  

2013-10-31 13:59:59|  分类: Akka |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
向一个Actor发送消息message,采用如下两种模式之一:
1) tell模式,用!发送。表示“即发即弃”(“fire-and-forget”)。 !==tell;
2) ask模式,用?发送。表示“期盼回复”,返回一个Future。?==ask

由于tell模式的代价最小,编程中需要尽量考虑使用tell模式。接受Actor在收到message后,可通过自动回复,检验可靠性。
如果收到回信来自DeadLetter Actor,表示发送失败。

对于ask模式:
import akka.pattern.{ ask, pipe }
import system.dispatcher // The ExecutionContext that will be used
case class Result(x: Int, s: String, d: Double)
case object Request
implicit val timeout = Timeout(5 seconds) // needed for ‘?‘ below
val f: Future[Result] =
for {
  x <- ask(actorA, Request).mapTo[Int] // call pattern directly
  s <- (actorB ask Request).mapTo[String] // call by implicit conversion
  d <-  (actorC ? Request).mapTo[Double] // call by symbolic name
} yield Result(x, s, d)

f pipeTo actorD // .. or ..
pipe(f) to actorD
接受Actor在收到Request后,必须使用sender ! 完成回复,使得Future 取得最终结果。例如:
try {
  val result = operation()
  sender ! result
} catch {
  case e: Exception )
  sender ! akka.actor.Status.Failure(e)
  throw e
}
  评论这张
 
阅读(639)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017