我在项目中使用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);
});
}
但没有任何反应。有谁知道为什么?
答案 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)执行。