Они связаны с очередью some_queue.
По задаче предполагается, что есть два паблиша.
Паблиш1 отправляет body с роутом роут1 , а паблиш 2 отправляет совсем иное содержимое body с rout2
Консьюмер 1 чекает какой роут если роут1 то мой код отрабатывает задачу и подтверждает получение сообщения роута1, а роут2 должен игнориться и должен возвращаться в очередь.
НО
После отработки, консьюмер1 стоит ждёт новых сообщений, но при этом сообщения с роутом2 не возвращает пока соединения консьюмера1 не закроешь.
Из-за этого Консьюмер2 не может получить сообщения с роутом2
Подскажите, пожалуйста, как сделать так, что бы сообщения с роутом2 возвращались в очередь, что бы их смог подхватить консьюмер2?
Это кривая архитектура - вам надо вашему консьюмеру то что ему надо давать, а другому (для другого типа) делайте свою очередь - вы не можете пропустить сообщение, но оставить его в той же очереди
Я это предложил боссу. Сказал ничего не трогай и прав лишил 😂
hh ru ваш друг, бос вам не друг
Aio-pika Есть метод IncomingMessage.reject(requeue: bool = true) Но я не понял его смысл Он просто в очередь возвращает сообщение, но при этом получается вечный цикл с этим сообщениями с роут2 Он прогоняет их и возражает и снова берет Думал может есть что то такое Более подходящее https://aio-pika.readthedocs.io/en/latest/apidoc.html#aio_pika.IncomingMessage.reject
Разве после этого метода вы повторно не получите тоже сообщение? А , дочитал про цикл
Вот я и пишу, что там вечный цикл получается 😂😂😂
Ну так то не решение ))
Ну мож более опытные подскажут вот и написал сюда Я с реббитом знаком второй день 🙄
очередь фифо, и когда вы делаете нак - это вот этот метод reject(c флагом тру) - вы возвращаете сообщение в очередь так как консьюмер его не обработал - соответственно его скипнуть не получится, дайрект эксчендж может роутить в две очереди сообщения
Т.е. нужно все же для роута2 создать отдельную очередь, верно я вас понял?)
Обсуждают сегодня