演员可以在Akka.net上偷看它的MessageQueue

时间:2016-09-25 01:52:32

标签: akka.net

我有一个IPClient actor,它管理/拥有一个打开/关闭成本很高的连接。

在演员完成处理邮件之前,我想查看演员邮箱的顶部以检查是否有其他待处理的邮件。   - 如果演员有更多工作,请保持连接打开。   - 如果演员清空了它的邮箱,请关闭连接。

以下是我在想的内容:

public void Handle(PollDevice message)
    {
        if (!_client.IsConnected)
            _client.Connect();

        var results = _client.GetData()

        var actorHasMoreWork = Context.Dispatcher.Mailboxes.???
        if (!actorHasMoreWork)
            _client.Disconnect();

        Sender.Tell(true);
    }

这可能吗?这是最好的方式吗?

1 个答案:

答案 0 :(得分:1)

我有部分答案。

您可以使用Context.Props.Mailbox

获取演员的邮箱ID(但不是邮箱本身)

一旦你有一个演员的邮箱(再次,上一步不会给你),我对文档的理解说你应该能够使用Mailbox.MessageQueue.HasMessagesMailbox.MessageQueue.Count来获取有关内容的信息。据我所知,如果没有将它们出列,你将无法看到任何消息。

然而,我无法确定获取邮箱对象的方法,而且我实际上已经找到了一些证据,它目前在Akka.Net中是不可能的。 a GitHub issue about making this possible自2014年9月开始发布,最后一次更新也是从2014年9月开始。

相关问题