2

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

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

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

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

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

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

任何指导将不胜感激。

4

1 回答 1

0

文档字面意思是:

“如果您发送一条指定回复处理程序的消息,而回复永远不会出现,那么默认情况下,您将得到一个永远不会取消注册的处理程序。”

对我来说,默认行为听起来也很糟糕,但幸运的是,从 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!");
        }
    }
});
于 2014-07-05T19:42:44.200 回答