汇总多个演员响应? [英] Aggregate multiple actor responses?
本文介绍了汇总多个演员响应?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试为我的应用程序收集健康信息,
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)
}
这篇关于汇总多个演员响应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文