gpt4 book ai didi

concurrency - 使用 Actor 发送 + 处理多条消息

转载 作者:行者123 更新时间:2023-12-04 06:00:01 24 4
gpt4 key购买 nike

在使用 Actor 时,如果一个 Actor 需要与多个其他 Actor 合作来完成一个请求,那么这里推荐的方法是什么?更准确地说,如果Actor A(通过处理消息M)需要从Actor B + Actor C获取信息,那么它可以异步地向Actor B + C发送消息,但是它应该如何将来自Actor B + C的响应关联到原始消息 M ?

我查看了 Akka 框架,但不知道这是如何完成的,因此必须自己实现一些东西,以便 Actor 跟踪已发送的消息,并尝试将他们的响应与源消息相关联。我一定遗漏了一些东西,因为我认为这种类型的行为已经内置到各种 Actor 框架中

最佳答案

只需创建一个新角色并使用它来保留上下文并在超时或执行“加入”后停止它。
您还可以使用 Future-composition 而不是产生一个 actor:

class A extends Actor {
def receive = {
case DoX(x) =>
val b = actorB ? DoYourPartOf(x) mapTo manifest[BResult]
val c = actorC ? DoYourPartOf(x) mapTo manifest[CResult]
b zip c map { case (b,c) => merge(b,c) } pipeTo sender
}
}
}

或数据流:
class A extends Actor {
def receive = {
case DoX(x) => flow {
val b = actorB ? DoYourPartOf(x) mapTo manifest[BResult]
val c = actorC ? DoYourPartOf(x) mapTo manifest[CResult]
merge(b(),c())
} pipeTo sender
}
}
}

关于concurrency - 使用 Actor 发送 + 处理多条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com