1

我在我的项目中使用了 vertx,但我遇到了 eventBus 的问题。如果我理解正确的话,它可以使用表示服务器路由的一个字符串来使用多种语言进行通信。我的 Server.java 中有这段代码:

vertx.eventBus().registerHandler("getTree", new Handler<Message<String>>() {
  public void handle(Message<String> e) {
    // e.reply(call of function returning a json string);
  }
});

在一个 javascript 文件中,我需要获取那个 json 字符串来暂时打印它。我有:

var eventBus = require('vertx/event_bus');
eventBus.send('getTree', '', function(reply) {
    console.log('I received a reply ' + reply);
    });
}

但什么也没有发生。有谁知道为什么?

4

1 回答 1

0

我假设您希望I received a reply在控制台中看到类似的内容。

为了能够接收返回给您的 JavaScript 回复处理程序的任何内容,您将需要更改您的 Java 消息处理程序并调用reply传入消息的方法,例如

vertx.eventBus().registerHandler("getTree", new Handler<Message<String>>() {
  public void handle(Message<String> msg) {
    msg.reply("message from Java handler");
  }
});

如果不调用reply方法,您的 JavaScript 发送方/回复接收方代码将不会发生任何事情。

将上述更改添加到您的 Java 代码后,您应该能够在控制台中看到以下日志:

我收到了来自 Java 处理程序的回复消息

请注意,即使您在 Vert.x 中使用不同的语言,整个逻辑仍由 JVM 执行(JavaScript 由 Rhino 开源实现)。

于 2014-10-01T15:27:01.110 回答