Зацикливание событий Vert.x с одним потоком

Я использую версию vert.x 2.1.5. И я пытался использовать цикл событий в своем проекте. пример кода приведен ниже

JsonObject result = null;
//loop starting
for (int i=0;i<length;i++)
{

 final JsonObject jsonObject1 = jsonObject.getArray("result").get(i);                                                           
 int x = jsonObject1.getInteger("X");
 String Data = "X="+x+"&Y="+y;  
 //calling another event 
vertx.eventBus().send("event1", Data,new Handler<Message<String>() {public void   handle(Message<String>response) 
{
JsonObject jsonObject = new JsonObject(response.body());
result_arry.addArray(jsonObject.getArray("details"));
                                            }
});
} // loop end
result = resultJson("Ok",result_arry ); 
//it will create one json object with proper format 
message.reply(result.toString());

В этом коде моя шина событий возвращает значение перед выполнением цикла событий. Мне нужно заполнить мой вывод в соответствии с выводом цикла событий. Как я могу этого добиться?


person NIKHIL K A    schedule 21.07.2016    source источник


Ответы (1)


По сути, проблема в том, что вы не ждете сообщений. Чтобы мой пример был более понятным, я удалил большую часть логики Json.

Vertx vertx = Vertx.vertx();
int messages = 10;

// First register your consumer
MessageConsumer<JsonObject> consumer = vertx.eventBus().consumer("event1");
consumer.handler(o -> {
    System.out.println("Got message" + o.body());

    // Consumer replies to sender with the same message
    o.reply(o.body());
});

// Now send your messages
for (int i=0;i<messages;i++) {
    JsonObject data = new JsonObject();
    data.put("value", i);

    vertx.eventBus().send("event1", data, response -> {
        if (response.succeeded()) {
            // Each time consumer replies, print it
            System.out.println("Consumer replied: " + response.result().body());
        }
    });
}

Обратите внимание, что ответ находится в теле обработчика, и отправитель должен убедиться, что ответ успешен, прежде чем получить к нему доступ.

person Alexey Soshin    schedule 21.07.2016