首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿克卡在停止演员前等待阿克克

阿克卡在停止演员前等待阿克克
EN

Stack Overflow用户
提问于 2015-06-01 10:32:30
回答 2查看 414关注 0票数 1

我使用的是Playplay.api.mvc.WebSocketakka.contrib.pattern.DistributedPubSub事件,这已经很好了。

代码语言:javascript
复制
class SomeSocketActor(out: ActorRef) extends Actor {
    val mediator = DistributedPubSubExtension(context.system).mediator
    mediator ! Subscribe("some_group", self)

    def receive: Actor.Receive = {
      case SubscribeAck(Subscribe("some_group", None, `self`)) =>
        context become ready
    }

    def ready: Actor.Receive = {
      // ...
    }

    override def postStop(): Unit = {
      mediator ! Unsubscribe("some_group", self)
    }
}

一旦套接字关闭,它就会发送Unsubscribe。一旦UnsubscribeDistributedPubSubMediator接收到,它就会使用UnsubscribeAck进行应答。但是,因为在那一刻(也就是在postStop之后),演员已经停了下来,UnsubscribeAck被移动了,Akkas死信邮箱和我的日志中都有这样的垃圾信息:

没有传递从Actorakka://application/user/distributedPubSubMediator#261175455到Actorakka://application/system/websockets/24/handler#325798268的消息Actorakka://application/system/websockets/24/handler#325798268。遇到1封死信。这个日志可以关闭或调整配置设置‘akka.log-死-字母’和‘akka.log-死信-在关闭。

我知道我可以遵循日志消息中的建议,但这似乎不是很好的实践。有没有办法告诉postStop方法中的参与者在停止之前等待UnsubscribeAck

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 11:02:41

postStop方法中没有,这太晚了。

但是,与其在接收UnsubscribeAck之前停止,您可以只在become等待UnsubscribeAck,在收到UnsubscribeAck时停止(或者在超时之后,以防从未收到UnsubscribeAck

票数 0
EN

Stack Overflow用户

发布于 2017-09-21 19:06:55

这实际上应该只是起作用,因为DistributedPubSubMediator看着你的演员在订阅时成为Terminated。在一个新的项目中,它确实按预期工作,中介为您取消订阅,因此您可能不需要做任何事情。我坚持这个答案,因为它不会在我的项目中这样做,它可能会影响到其他人。

我正在做的是编写另一个寿命较长的参与者(您可以在控制器中创建它),并让WebSocket参与者与之交谈以管理订阅。这样,新的参与者可以传递取消订阅消息,然后它可以接收和忽略UnsubscribeAck

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30571232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档