私はRabbitMQとJavaで作業しています。 私は、キューにメッセージを送信し、別のキューに返信を待つexecuteLogin()メソッド、持っている:返されたメッセージは、isSuccess分野における真の含まれている場合、私はの呼び出し元に真を返す必要がありますがexecuteLogin()メソッドは、isSuccessがfalseの場合、私はfalse(ログに記録されていない)を返す必要があります。 私はこの方法を試してみました:RabbitMQ Javaコンシューマからメッセージを返す方法
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);
}
しかし、両方の方法で、私は私の問題解決することはできません:
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);
またはこのよう最初の方法で を、それはfalseを返しますが、それは印刷しますメッセージ( "isSuccess":true)。 2番目の方法では、 "no message"が表示されます。
私はbasicConsumeとdefaultConsumerが非同期のですので、最初はメッセージを取得しませんが、それを取得すると印刷されるという問題があると思います。
ええ、ありがとうございますが、問題は、私はサーバーコンポーネントを実現していない、クライアントだけです。 私はメッセージを送ってきました、そして、私はキューのメッセージを待って、定義されたrouting_keyで、メッセージを分析して、何かを呼び出し側に返します。 これは可能ですか? – luca89pe