Akka Typed中的Behaviors.setup和Behaviors.receive之间有什么区别?

acruukt9  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(196)

在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  
}

有什么区别吗?

wj8zmpe1

wj8zmpe11#

无论是否有要处理的消息,传递给Behaviors.setup的函数(ActorContext[String] => Behavior[String])都会在生成参与者时执行。
传递给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)。

相关问题