[英]Vert.x event looping with single thread
我正在使用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());
在此代碼中,我的事件總線在執行事件循環之前返回值。 我需要根據事件循環輸出填充輸出如何實現該目標
基本上,問題在於您不等待消息到達。 為了使我的示例更加清楚,我刪除了大多數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());
}
});
}
請注意,回復位於處理程序主體內,發送者必須在訪問響應之前檢查響應是否成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.