Java Future在Vert.x中是如何工作的?

Java Future在Vert.x中是如何工作的?,java,vert.x,Java,Vert.x,我使用EventBus发送一条消息,希望将回复消息放入一个变量中,然后返回它。这是代码块 public class MessageExecute { private static final Logger logger = LoggerFactory.getLogger(MessageExecute.class); public static <T> T sendMessage(Vertx vertx,String address,T message){ Future&

我使用EventBus发送一条消息,希望将回复消息放入一个变量中,然后返回它。这是代码块

public class MessageExecute {

private static final Logger logger = LoggerFactory.getLogger(MessageExecute.class);

public static <T> T sendMessage(Vertx vertx,String address,T message){

    Future<Message<T>> future = Future.future();

    vertx.eventBus().send(address, message, future.completer());

    future.setHandler(new Handler<AsyncResult<Message<T>>>() {

        @Override
        public void handle(AsyncResult<Message<T>> event) {
            logger.info("received reply message | thread - " + Thread.currentThread().getName());
        }

    });
    boolean notFound = true;
    while(notFound){
        try{
            if(future.result()!= null){
                notFound = false;
            }
        }catch(Exception e){

        }
    }


    return message;

 }
}
公共类MessageExecute{
私有静态最终记录器Logger=LoggerFactory.getLogger(MessageExecute.class);
公共静态T发送消息(Vertx Vertx,字符串地址,T消息){
Future=Future.Future();
eventBus().send(地址、消息、future.completer());
future.setHandler(新处理程序(){
@凌驾
公共无效句柄(AsyncResult事件){
logger.info(“收到回复消息| thread-”+thread.currentThread().getName());
}
});
布尔notFound=true;
while(未找到){
试一试{
if(future.result()!=null){
notFound=false;
}
}捕获(例外e){
}
}
返回消息;
}
}

事实上,这很好。但是有时候,虽然block永远不会退出。这意味着future.result()没有得到值,即使在收到回复消息后。我不知道这是正确的方式,我也不清楚vert.x中的未来是如何工作的。有没有其他方式来实现这种场景。

我建议您阅读Vertx Sync项目-

在示例中,使用与您的案例非常相似的以下示例:

EventBus eb = vertx.eventBus();
HandlerReceiverAdaptor<Message<String>> adaptor = streamAdaptor();
eb.<String>consumer("some-address").handler(adaptor);
// Receive 10 messages from the consumer:
for (int i = 0; i < 10; i++) {
    Message<String> received1 = adaptor.receive();
    System.out.println("got message: " + received1.body());
}
EventBus eb=vertx.EventBus();
HandlerReceiverAdapter适配器=StreamAdapter();
eb.消费者(“某些地址”).经办人(适配器);
//从消费者处接收10条信息:
对于(int i=0;i<10;i++){
Message received1=适配器.receive();
System.out.println(“获取消息:+received1.body());
}

Future的惯用用法是让
sendMessage
return
Future
立即返回,而不是阻塞。。。这是一种选择吗?