我使用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;
}
}
实际上,这是正常的。但有时while block永远不会退出。它的意思是future.result()没有得到值,即使在收到回复消息之后。我不知道这是正确的方法,我也不清楚futures在vert.x中是如何工作的。有没有其他方法来实现这种情况。
1条答案
按热度按时间x4shl7ld1#
我建议您阅读有关vertx同步项目的信息-http://vertx.io/docs/vertx-sync/java/
在示例中,有以下与您的案例非常相似的示例: