Вопрос:
У меня есть как клиенты Java, так и Python, которые я использую channel.basicConsume(). В какой-то момент я хотел бы остановить этих потребителей, не останавливая всю программу.
В Python с Pika я разместил вызовы channel.stop_consuming(), но они генерируют ошибки, которые я игнорирую. Кажется, работает
В Java я не уверен, как это сделать, поскольку stop_consume() не представляется доступным.
Вся документация, которую я вижу, рассказывает обо всех способах создания потребителей, но я не могу найти ничего, что показывает, как остановить их.
Каков наилучший способ сделать это?
Ответ №1
Счетная часть basic_consume равна basic_cancel. basic_cancel запускает предоставленную функцию обратного вызова on_basic_cancel_ok, когда rabbitmq выполнил отмену. Будьте готовы к короткому периоду, когда вы все равно можете получать сообщения.
см. Pika Channel
Ответ №2
Вы должны потреблять в потоке, чтобы просто прервать этот поток и оставить оставшуюся часть вашей программы
Thread t = new Thread(){ public void run(){ //consumer is in here } }; t.start(); // somewhere else later t.interrupt();
Возможно, вам понадобится сделать Thread t доступным в другом месте купить, имея его как поле объекта, а не локальную переменную