【问题标题】:Vert.x how to deal with missing handlerVert.x 如何处理丢失的处理程序
【发布时间】:2013-04-04 14:04:58
【问题描述】:

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

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

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

  1. 如果找不到处理程序,立即抛出异常
  2. 回调错误以清除响应侦听器
  3. Catchall 处理程序,您可以在其中放置一些代码来决定如何自己处理未处理的请求

我对这些或任何其他方法持开放态度,我只是想确保我以正确的方式解决这个问题。

有一个issue 对此开放,但我不知道是否值得为当前稳定版本(v1.3)寻找修复,或者我是否应该等待 v2.0(我还没有看到 v2.0 的任何时间线,但在它周围的 git repo 中似乎确实有很多活动)。

任何指导将不胜感激。

【问题讨论】:

    标签: memory-leaks vert.x


    【解决方案1】:

    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!");
            }
        }
    });
    

    【讨论】:

    • 感谢您的帮助,但这个问题已经存在一年多了 :-) 此外,vert.x 团队已明确表示所有问题都应直接转到他们的 google 群组论坛(在此回答了很久以前)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2021-06-20
    • 2011-07-15
    • 2013-01-19
    • 2022-11-11
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多