http://coup-de-grace.oss-cn-beijing.aliyuncs.com/107-0.jpg?x-oss-process=style/blog_width_800

前面的话

Akka 的文档是出了名的不明所以,浅尝辄止

在 2.0 开始阉割了从 actor 实例中获取 mailbox 状态的 api.

原因在这里

大抵如下:

域名上的 letitcrash 现在都没人提了.

就监控指标而言这 blog 写的并不让人信服,不然为什么商业支持的版本还是具备 mailbox 监控功能呢?

官方文档&网络上搜索到的大部分都是.withDispatcher().withMailbox的形式的.

下面说下使用 Extension 机制,实现以下这块内容.

api 在这三四年间也是有了变化. 自己做 ActomicInteger 或者 LongAdder 如今好像不需要了.

实现

创建实际存储消息的 non-blocking 队列

继承默认实现,不做更多的修改(虽然默认的无界 queue 也是只有出列入列的功能而已.

public class TtMailbox extends akka.dispatch.UnboundedMailbox.MessageQueue

创建 extension 的 实际实现

使用容器维护 actor 与 mailbox,以便外部随时查询

我们在实际实现里利用了一下新增的 api numberOfMessages