RabbitMQ ve Java ile çalışıyorum. Bir sıraya bir ileti gönderir ve başka sırasına bir cevap beklemek bir executeLogin() yöntemi vardır: dönen mesajı isSuccess alanda gerçek içeriyorsa, ben arayana gerçek dönmek gerekir executeLogin() yöntemi, isSuccess false ise, false (kaydedilmemiş) döndürmem gerekir.RabbitMQ java tüketicisinden mesaj nasıl geri dönülür
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);
veya bu şekilde: bu şekilde çalıştı
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);
}
Ancak her iki yönden, benim sorunu çözemezler: İlk şekilde , yanlış döndürür, ancak yazdırır mesaj ("isSuccess" ile: true). İkinci şekilde, "mesaj yok" yazdırır.
Ben sorun mesajı almak değil başında öylesine basicConsume ve defaultConsumer, asenkron olduğunu düşünüyorum, ama bunu alırken, onu yazdırır.
Evet, teşekkürler, ama sorun şu ki, sunucu bileşenini, yalnızca istemciyi fark etmemiştim. Bir mesaj gönderiyorum, sonra bir mesajın kuyruğunda beklemeli bir routing_key ile beklemek zorundayım, o mesajı analiz edip arayana bir şeyler yolladım. Bu mümkün mü? – luca89pe