【问题标题】:Why dont akka actors have a postStart method?为什么 akka 演员没有 postStart 方法?
【发布时间】:2015-04-21 19:19:31
【问题描述】:

这是我必须处理的情况 - 我正在使用带有播放框架的 websockets,每个 websocket 连接都有自己的Actor,如here 所述。现在,一旦建立 websocket 连接,我需要启动另一个订阅Redis 频道的Actor,并且在将任何已发布的消息发送到该频道时将该消息传递给其父级,即Websocket Actor。所以我需要在Websocket Actor 启动后启动Redis Subscriber Actor。但是演员没有postStart 方法。我尝试在Websocket ActorpreStart 方法中创建Redis Subscriber Actor,它工作正常,但我不明白Actors 没有postStart 方法的原因。这不是演员创建儿童演员的常见场景吗?还是这种做事方式不对?

【问题讨论】:

  • 不知道为什么preStart 不足以满足您的需求,它是放置子actor 创建的一个好地方(另一个是构造函数主体)。关于preStart 的事情是它真正意味着预消息处理。 Actor 本身已启动,但尚未从邮箱接收消息。这是确保在开始处理消息之前创建任何其他依赖项的好地方。如果你在 actor 开始处理消息之后执行此操作,你可能会遇到尚未创建依赖项(子项)的竞争条件。
  • @cmbaxter 我认为这也可能是答案。

标签: scala playframework akka


【解决方案1】:

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

您应该查看演员生命周期图here 以获得更清晰的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2020-05-12
    • 2016-04-28
    • 1970-01-01
    • 2023-03-03
    • 2018-01-13
    • 2018-04-20
    相关资源
    最近更新 更多