gpt4 book ai didi

java - Vert.x事件循环与单线程

转载 作者:行者123 更新时间:2023-12-03 13:09:48 26 4
gpt4 key购买 nike

我正在使用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());
}
});
}

请注意,回复位于处理程序主体内,发送方必须在访问响应之前检查响应是否成功。

关于java - Vert.x事件循环与单线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com