Привет, я использую rabbitMQ в своем приложении java. Когда я останавливаю приложение, я должен убедиться, что остановите прослушиватель очереди (прекратите получать сообщения из очереди), прежде чем остановить приложение. Я не уверен, нужно ли мне звонить channel.close() или channel.basicCancel("tag"). Для остановки прослушивания очереди был записан следующий код.
if(myContext.myChannel.isOpen()){
//myChannel is the one I am using to listen to queue
myContext.myChannel.basicCancel("OP");
//myContext.myChannel.close();
}else{
return ok("Channel is not open");
}
Если вы хотите прослушивать прослушивание, вам необходимо:
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("myQueue", false, false, false, null);
MyConsumer consumer = new MyConsumer(channel);
String consumerTag = channel.basicConsume("myQueue", false, consumer);
System.out.println("press any key to terminate");
System.in.read();
channel.basicCancel(consumerTag);<----- this stop listening
channel.close(); <--- this close the channel and eventually all listening
connection.close();<-- this close the connection and all channels
Пожалуйста, прочитайте об "isOpen"
методе "isOpen"
: https://www.rabbitmq.com/api-guide.html
Использование метода isOpen() для каналов и объектов соединения не рекомендуется для производственного кода, так как значение, возвращаемое методом, зависит от существования причины выключения.
if(myContext.myChannel.isOpen()){ //myChannel is the one I am using to listen to queue myContext.myChannel.basicCancel("OP"); //myContext.myChannel.close(); }else{ return ok("Channel is not open"); }
приведенный ниже кодif(myContext.myChannel.isOpen()){ //myChannel is the one I am using to listen to queue myContext.myChannel.basicCancel("OP"); //myContext.myChannel.close(); }else{ return ok("Channel is not open"); }