如何只处理来自儿童演员的消息?
How to only process messages from child actors?
我构建了一个 Akka FSM,它在其构造函数中生成了两个子 actor,并且只从其中一个接收消息。
val lhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "lhs")
val rhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "rhs")
在处理传入事件时,我想过滤来自 lhsNode
的事件。我尝试通过以下方式实现此目的:
when(WaitFor1) {
case Event(event: SomeEventType, _) =>
// Control flow reaches this point but...
if (sender == lhsRef) {
// ...it never enters the if clause.
这不起作用。事实上,sender
和 lhsNode
并不相等,即使它肯定是 lhsNode
向我的 FSM 发送消息。
sender() Actor[akka://default/user/$a#670517729]
lhsNode Actor[akka://default/user/$a/$a/$b/lhs#-354253348]
我做错了什么?
只比较 sender
和 lhs
的名称。检查消息是否真的由 lhsNode
.
发送
sender.path.name == "lhs"
或
sender.path.name = lhsNode.path.name
确保 sender
只是 lhs
演员。 forward
如果中间涉及任何其他参与者,则为消息。
如下所示
when(WaitFor1) {
case Event(event: SomeEventType, _) =>
// ...
if (sender.path.name == "lhs") {
// ....
使用模式匹配守卫
when(WaitFor1) {
case Event(event: SomeEventType, _) (if sender.path.name == "lhs") =>
我构建了一个 Akka FSM,它在其构造函数中生成了两个子 actor,并且只从其中一个接收消息。
val lhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "lhs")
val rhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "rhs")
在处理传入事件时,我想过滤来自 lhsNode
的事件。我尝试通过以下方式实现此目的:
when(WaitFor1) {
case Event(event: SomeEventType, _) =>
// Control flow reaches this point but...
if (sender == lhsRef) {
// ...it never enters the if clause.
这不起作用。事实上,sender
和 lhsNode
并不相等,即使它肯定是 lhsNode
向我的 FSM 发送消息。
sender() Actor[akka://default/user/$a#670517729]
lhsNode Actor[akka://default/user/$a/$a/$b/lhs#-354253348]
我做错了什么?
只比较 sender
和 lhs
的名称。检查消息是否真的由 lhsNode
.
sender.path.name == "lhs"
或
sender.path.name = lhsNode.path.name
确保 sender
只是 lhs
演员。 forward
如果中间涉及任何其他参与者,则为消息。
如下所示
when(WaitFor1) {
case Event(event: SomeEventType, _) =>
// ...
if (sender.path.name == "lhs") {
// ....
使用模式匹配守卫
when(WaitFor1) {
case Event(event: SomeEventType, _) (if sender.path.name == "lhs") =>