在我的系统中,我希望演员A
向演员ReplyGenerator
发送相同的消息。
我没有创建三个演员,而是考虑将他们的行为与And行为污染者结合起来,然后将该行为传递给object Foobar {
def foobar(): Behavior[Request] =
ContextAware[Request] {
context =>
val foo1 = context.spawn(Props(Foo1.behavior()), "foo1")
val foo2 = context.spawn(Props(Foo2.behavior()), "foo2")
val foo3 = context.spawn(Props(Foo3.behavior()), "foo3")
val generator = context.spawn(Props(ReplyGenerator.behavior(List(foo1, foo2, foo3))),
"generator")
Static {
case request: Request =>
generator ! request
}
}
}
。
如果我这样做,会创建多少个演员?我只会得到一个有三个行为的演员,或三个有不同行为的演员吗?
这是我的真实代码使用非和方法,具体(请参阅ReplyGenerator
如何传递对其他actor的引用):
object ReplyGenerator {
def behavior(subscribers: List[ActorRef[Reply]]): Behavior[Request] = {
Static {
case request: Request =>
subscribers.foreach(_ ! Reply.empty)
}
}
以下是向所有订阅者发送相同消息的And
行为:
{{1}}
考虑到我希望演员foo 1,2,3并行运行,可以在这里使用{{1}}组合器吗?
谢谢。
答案 0 :(得分:2)
如果你的意思是执行并行性,那么你将不得不像在示例代码中那样创建单独的Actors(通过单独的spawn
调用) - 使用And
只会创建一个运行一个接一个地包含行为。