【发布时间】:2016-04-10 21:30:09
【问题描述】:
我正在使用 RabbitMQ 和 Java。 我有一个 executeLogin() 方法,它在队列上发送消息并在另一个队列上等待回复:如果返回的消息在 isSuccess 字段中包含 true,我需要要将 true 返回给 executeLogin() 方法的调用者,如果 isSuccess 为 false,我需要返回 false(未记录)。 我试过这样:
boolean logged = false;
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
LoginConfirmation confirm = gson.fromJson(message, LoginConfirmation.class);
channel.queueDelete(reply_to);
System.out.println(" [x] Received '" + message + "'");
LOGGER.log(Level.FINE, gson.toJson(confirm));
logged = confirm.isSuccess();
}
};
channel.basicConsume(reply_to, true, consumer);
或者这样:
GetResponse response = channel.basicGet(reply_to, false);
if(response == null){
System.out.println("No message");
}else{
byte[] body = response.getBody();
String msg = new String(body, "UTF-8");
System.out.println(msg);
}
但是在这两种方法中,我都无法解决我的问题: 在第一种方式中,它返回 false,但它会打印消息(使用“isSuccess”:true)。第二种方式,打印“no message”。
我认为问题是basicConsume和defaultConsumer是异步的,所以一开始它不会检索消息,但是当它检索到它时,它会打印它。
【问题讨论】:
标签: java asynchronous rabbitmq