Vert.x如何处理丢失的处理程序

时间:2013-04-04 14:04:58

标签: memory-leaks vert.x

最初在论坛上询问 - https://groups.google.com/forum/#!topic/vertx/jdNRWlE6v4Y

我刚刚阅读this thread讨论通过事件总线发送消息的问题,其中没有指定地址的注册处理程序。 我只是好奇人们如何处理这种情况。手动计时器是推荐的方法吗?这种方法会随着时间的推移泄漏内存吗?

来自节点我已经看到了一些解决这类问题的方法:

  1. 如果找不到处理程序,立即抛出异常
  2. 使用错误回调以清除响应侦听器
  3. Catchall处理程序,您可以在其中放置一些代码来决定如何自己处理未处理的请求
  4. 我对这些或任何其他方法持开放态度,我只是想确保以正确的方式解决这个问题。

    issue开放,但我不知道是否值得查看当前稳定版本(v1.3)的修复程序,或者我是否应该等待v2.0(我的避风港)没有看到任何类型的v2.0的时间表,但在它周围的git repo中确实有很多活动)。

    任何指导都会非常感激。

1 个答案:

答案 0 :(得分:0)

documentation字面上说:

  

"如果您发送指定回复处理程序的消息,则永远不会回复   然后,默认情况下,你会留下一个永远不会得到的处理程序   。未登记"

对我来说也听起来很糟糕的默认行为,但幸运的是,自Vert.x 2.0以来我们有了一种发送超时的方法,这看起来像100%的时间。

示例:

eb.sendWithTimeout("test.address", "This is a message", 1000, new Handler<AsyncResult<Message<String>>>() {
    public void handle(AsyncResult<Message<String>> result) {
        if (result.succeeded()) {
            System.out.println("I received a reply " + message.body);
        } else {

            System.err.println("No reply was received before the 1 second timeout!");
        }
    }
});