本文介绍了汇总多个演员响应?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试为我的应用程序收集健康信息,
I am trying to collect health information for my application as
class HealthMonitor extends Actor with ActorLogging { val statusReporter = new StatusReporter val versionInfo = context.actorOf(Props[VersionInfo], "versionInfo") val memoryInfo = context.actorOf(Props[MemoryInfo], "memoryInfo") def receive = LoggingReceive { case HealthReportRequest => log.debug("Generating Health Report") println("Generating Health Report") // todo (harit): should be concurrent calls and collect results versionInfo ! VersionInfoRequest memoryInfo ! MemoryInfoRequest } }我需要什么 我需要一种可以从 versionInfo , memoryInfo 和其他一些方式收集响应的方法信息随后变成1个响应并将其发送到某个地方
What I need I need a way wherein I can collect responses from versionInfo, memoryInfo, and some other info later into 1 response and send it somewhere
,而我不想按顺序发送或希望阻止通话,最好的方法是什么?
and I do not want a sequential or want to block the calls, what is the best way?
推荐答案我会猜测您是要问而不是告诉,因为您是在谈论响应,因此代码应该是
I'll make a guess you meant an ask instead of a tell because you're talking about responses, so the code should be
def receive = LoggingReceive { case HealthReportRequest => log.debug("Generating Health Report") println("Generating Health Report") versionInfo ? VersionInfoRequest memoryInfo ? MemoryInfoRequest }然后您可以输入期货。
def receive = LoggingReceive { case HealthReportRequest => versionInfo ? VersionInfoRequest mapTo[VersionInfo] memoryInfo ? MemoryInfoRequest mapTo[VersionInfo] }然后合并
def receive = LoggingReceive { case HealthReportRequest => val version = versionInfo ? VersionInfoRequest mapTo[VersionInfo] val memory = (memoryInfo ? MemoryInfoRequest mapTo[VersionInfo]) version.flatMap(v => memory.map(m => fun(v, m) )) }或通过for(not
or via for (not sure on the syntax)
def receive = LoggingReceive { case HealthReportRequest => val version = versionInfo ? VersionInfoRequest mapTo[VersionInfo] val memory = (memoryInfo ? MemoryInfoRequest mapTo[VersionInfo]) for { v <- version m <- memory } yield fun(v, m) }更多推荐
汇总多个演员响应?
发布评论