Akka Typed 中的 Behaviors.setup 和 Behaviors.receive 有什么区别?
What is the difference between Behaviors.setup and Behaviors.receive in Akka Typed?
我有时会在 Akka 教程中看到
Behaviors.setup { ctx =>
...
Behaviors.receiveMessage[String] { msg =>
... // some operations with ctx and message
}
}
有时只是
Behaviors.receive[String] { (ctx , msg) =>
... // some operations with ctx and message
}
有什么区别?
传递给 Behaviors.setup
的函数 (ActorContext[String] => Behavior[String]
) 在生成 actor 时执行,无论是否有消息要处理。
传递给 Behaviors.receive
的函数 ((ActorContext[String], String) => Behavior[String]
) 在有消息要处理之前不会执行。
请注意,如果您有
Behaviors.setup { ctx =>
// code block A
Behaviors.receiveMessage[String] { msg =>
// code block B
}
}
Behaviors.receive[String] { (ctx, msg) =>
// code block A
// code block B
}
Behaviors.receive
中的 code block A
将对每条消息执行(除非并直到 code block B
安装了新的 Behavior
)。
我有时会在 Akka 教程中看到
Behaviors.setup { ctx =>
...
Behaviors.receiveMessage[String] { msg =>
... // some operations with ctx and message
}
}
有时只是
Behaviors.receive[String] { (ctx , msg) =>
... // some operations with ctx and message
}
有什么区别?
传递给 Behaviors.setup
的函数 (ActorContext[String] => Behavior[String]
) 在生成 actor 时执行,无论是否有消息要处理。
传递给 Behaviors.receive
的函数 ((ActorContext[String], String) => Behavior[String]
) 在有消息要处理之前不会执行。
请注意,如果您有
Behaviors.setup { ctx =>
// code block A
Behaviors.receiveMessage[String] { msg =>
// code block B
}
}
Behaviors.receive[String] { (ctx, msg) =>
// code block A
// code block B
}
Behaviors.receive
中的 code block A
将对每条消息执行(除非并直到 code block B
安装了新的 Behavior
)。