簡體   English   中英

Vert.x事件循環與單線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM