在vertx中使用eventBus

时间:2014-05-06 09:00:39

标签: java javascript vert.x event-bus

我在项目中使用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);
    });
}

但没有任何反应。有谁知道为什么?

1 个答案:

答案 0 :(得分: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(Rhino开源实现的JavaScript)执行。