为什么akka演员没有postStart方法?

时间:2015-04-21 19:19:31

标签: scala playframework akka

这是我必须处理的情况 - 我正在使用带有播放框架的websockets,每个websocket连接都有自己的Actor,如here所述。现在,只要进行了websocket连接,我就需要启动另一个订阅Actor频道的Redis,并在向频道发送任何已发布的消息时将该消息传递给其父节点,即{{1} }。所以我需要在Websocket Actor开始后Redis Subscriber Actor开始。但演员没有Websocket Actor方法。我尝试在postStart的{​​{1}}方法中创建Redis Subscriber Actor,但它工作正常,但我不明白preStart没有Websocket Actor方法的原因。这不是演员创造儿童演员的常见场景。或者这种处理方法是不正确的?

1 个答案:

答案 0 :(得分:9)

正如我的评论中所指出的,我不确定为什么preStart不足以满足您的需求,它是创建子actor的一个好地方(另一个是构造函数体)。关于preStart的事情是它真正意味着预处理消息。演员本身已经启动但尚未从邮箱接收消息。在开始处理消息之前,这是确保创建任何其他依赖项的好地方。如果您在演员开始处理消息后执行此操作,则可能会遇到尚未创建依赖项(子级)的竞争条件

为了更清晰,您应该查看演员生命周期图here