Использование eventBus в vertx

Я использую 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);
    });
}

Но ничего не происходит. Кто-нибудь знает почему?


person Charline    schedule 06.05.2014    source источник
comment
Вы можете разместить более подробную информацию? ваш сервер работает? любые ошибки в логах /   -  person neoeahit    schedule 02.06.2014


Ответы (1)


Я предполагаю, что вы хотели бы видеть в консоли что-то вроде 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).

person Tom    schedule 01.10.2014