Чем принципиально отличается ack от reject (requeue=false)? Оба же удаляют сообщения

из очереди?

54 ответов

193 просмотра

Во-первых, лучше использовать nack, а не reject. Во-вторых, nack позволит перевести сообщение в dlq, а ack — нет.

Reject обрабатывается в dlx, reject это отклонение сообщения, а аск - потдверждение обработки

Юрий- Автор вопроса
Vadim
Во-первых, лучше использовать nack, а не reject. В...

Спасибо за ответ. Если отколенное сообщение больше точно не нужно и не хочется занимать место в памяти (диске) отклонёнными сообщениями, то нужно просто ack отправить?

Юрий
Спасибо за ответ. Если отколенное сообщение больш...

Под отклонением тут понимают "невозможность десериализации сообщения" например, а не бизнес ошибки

Юрий
Спасибо за ответ. Если отколенное сообщение больш...

Лучше сделать reject. Сейчас вам эти сообщения не нужны а завтра вы захотите собирать эти отклонённые сообщения в отдельную очередь

Vadim
Во-первых, лучше использовать nack, а не reject. В...

Ощущение что вы вообще всё неверно написали

Dmitry
Бизнес проблемы и реджект ну незнаааю

Есди не доступна бд для дальнейшей обработки - то nack. Есди фундаментальная ощибка то reject. Если отработано успешно то ack. Вот и вся логика

Юрий- Автор вопроса
Aleksey Barabanov
Лучше сделать reject. Сейчас вам эти сообщения не ...

Если обычное сообщение из-за скидывается на диск, то очередь из отклонённых тоже будет скидываться на диск или это отдельно настраивается?

Юрий
Если обычное сообщение из-за скидывается на диск, ...

Ну вы можете пока их не собирать, можете сразу складывать в отдельную очередь. Тут уже как захотите

Юрий- Автор вопроса
Юрий
Если обычное сообщение из-за скидывается на диск, ...

А если сообщение не отработано и поздно что-то делать, время ответа упущено, ответ больше не нужен. Тогда что?

Юрий- Автор вопроса
Aleksey Barabanov
А разве не реджект в dlx уводит?

И он, и nack, у них же одинаковые свойства за исключением дефолта и того, что nack может накнуть батч, а reject — нет.

Aleksey Barabanov
Ощущение что вы вообще всё неверно написали

Что значит вообще? ack подтверждает обработку и выкидывает сообщение, nack — отклоняет одно или батч сообщений и применяет правила, заложенные в очереди: если есть биндинг к dlq, то сообщение(я) уйдут туда.

Юрий- Автор вопроса
Vadim
Что значит вообще? ack подтверждает обработку и вы...

Вообще - это значит, что я не хочу анализировать очередь из отклонённых сообщений, особенно не хочу заботится о переполнение очереди, памяти, диска и т. п. отклонёнными сообщениями. Если нет биндинга отклонённых сообщений в dlq, то поведение ack и reject (requeue=false) будет одинаковое?

Юрий- Автор вопроса
Vadim
Я не вам отвечал.

Перепутал )) Сорян ))

Юрий- Автор вопроса

Понял, спасибо. Вот сделали бы в rmq response (код) вместо ack, nack, reject и т. п., было бы понятней. Если есть очередь от отклонённых сообщений, то по смыслу должна быть и очередь из обработанных. Существует ли такая?

Vadim
Что значит вообще? ack подтверждает обработку и вы...

Я просто не встречал на практике использования nack required false, где нак не возвращает сообщение в очередь. Поэтому совсем не понял, не знал что у нака есть признак required

Aleksey Barabanov
Я просто не встречал на практике использования nac...

Может, просто батчи на кролике не делали. Там без nack(multiple = true, requeue = false) никак.

Vadim
Может, просто батчи на кролике не делали. Там без ...

Обычно накать батчами не приходится, достаточно поштучного нака на батчевый ак

Vadim
Может, просто батчи на кролике не делали. Там без ...

И он получается также откидывается в dlx?

Aleksey Barabanov
Обычно накать батчами не приходится, достаточно по...

От логики зависит, да. У нас просто была система, которая тоже умела батчами транзакционно принимать, поэтому нам подходило.

Юрий- Автор вопроса

Для регистрации отклонённых сообщений тоже должен быть лог в приложении, однако сделали же дополнительную очередь. Поэтому, как по мне, если есть очередь для отклонённых сообщений, то должна быть аналогичная очередь и для обработанных. Или, наоборот, не должно быть очереди, ни для отклонённых сообщений, ни для обработанных, т. е. полагаться только на логи приложения. Это мои общие рассуждения из принципа "наименьшего удивления". В любом случае приходится полагаться на реальную реализацию, а не мои хотели и ожидания.

Юрий- Автор вопроса

Вы правы. Всегда приходится смотреть на что-то новое через призму своих знаний. Аналогичный вопрос для необработанных сообщений А зачем она? Её же тоже нужно как-то обрабатывать: акать, реджектить и т. п., как-то очищать, чтобы память и диск не занимать.

Юрий
Вы правы. Всегда приходится смотреть на что-то нов...

Если вы успешно отработали сообщение, то его содержимое вам больше не нужно (за редкими исключениями). Если неудачно - то ещё как пригодится: снова попробовать, переслать в фолбэк-очередь итп

Не нужно в одном конкретном примере ретрай-очереди. На таких свет клином не сошёлся.

Владислав Килин
Не нужно в одном конкретном примере ретрай-очереди...

Это самый частый пример использования. Зачем с этим спорить и еще больше запутывать человека — непонятно.

Vadim
Это самый частый пример использования. Зачем с эти...

В моем опыте работы с кролем и dlq это не самый частый пример использования.

Юрий- Автор вопроса
Владислав Килин
Если вы успешно отработали сообщение, то его содер...

Для удачных - что-то типа лога для отладки и анализа инцидентов. Для неудачных есть же reject(requeue=True). Зачем ещё одна дополнительная очередь?

Юрий
Для удачных - что-то типа лога для отладки и анали...

Кролик не лог и не бд. Не надо его юзать в этом назначении.

Юрий- Автор вопроса

Это понятно, речь же шла о ретрай.

Юрий
Это понятно, речь же шла о ретрай.

Представьте что ошибка в самом сообщении и повторная обработка ее не решит. Возвращать такое сообщение в голову равноценно тому чтобы повесить весь консюмер

Юрий
Это понятно, речь же шла о ретрай.

Кролик не может в одной очереди хранить сообщения, которые нужно отдать сейчас, и сообщения с delay. Иначе говоря, delay — это свойство очереди, а не сообщения. Поэтому оставить сообщение в этой очереди постоять не выйдет. Его надо перенести.

Юрий- Автор вопроса
Владислав Килин
Представьте что ошибка в самом сообщении и повторн...

Можно добавить кастомный хэдер со счетчиком ретраев и т. п.

Юрий
Можно добавить кастомный хэдер со счетчиком ретрае...

Так ваш счетчик ретраев без делэя за микросекунды перешагнет порог. Какой в этом смысл? Обычно системы, с которыми ваш консьюмеры общаются, могут восстановиться не сразу, и вы просто застрянете на одном месте да еще все сообщения повыкидываете зря.

Юрий- Автор вопроса
Vadim
Так ваш счетчик ретраев без делэя за микросекунды ...

Так если консьмер умер, то некому будет и отправлять сообщение в начало очереди, не будет акать и выкидывать сообщения из очереди.

Юрий
Так если консьмер умер, то некому будет и отправля...

Если консюмер умер, то очереди будет плохо, да

Юрий- Автор вопроса
Владислав Килин
Представьте что ошибка в самом сообщении и повторн...

В идеальном мире, с высокой доступность консьмер в 2024 и т. п., не должно быть ошибок в сообщении. . Отсутствие ошибок в сообщении как по мне проще обеспечить, чем 100% аптайм.

Юрий
В идеальном мире, с высокой доступность консьмер в...

Хм. Это очень смелое и в корне неверное заявление.

Юрий- Автор вопроса
Владислав Килин
Хм. Это очень смелое и в корне неверное заявление.

Уверен, что вы знаете rabbitmq гораздо лучше меня поэтому пытаюсь разобраться и понять, что и как. Не более.

Юрий- Автор вопроса
Владислав Килин
Представьте что ошибка в самом сообщении и повторн...

При этом написали, что возможны ошибки в сообщении. Мне кажется, что отсутствие ошибок в сообщении добиться проще, чем достаточно высокий аптайм

Юрий
При этом написали, что возможны ошибки в сообщении...

Нет, я привел ошибку в сообщении как один из примеров - тривиальный достаточно.

Похожие вопросы

Обсуждают сегодня

Всем привет. Понимаю, что, наверное, сто раз поднимали эту тему, но по ключевым словам не смог найти. Как передать в values.yaml зависимого хелм-чарта теги образов, собираемых...
Vitalik Petrov
4
Всем привет. Werf v2.10.5 При удалении релиза вместе с неймспейсом (werf dismiss --namespace namespace_name) Сыпятся ошибки ┌ Waiting for resources elimination: namespaces/rel...
Vitalik Petrov
1
@aigrychev, @ilya_lesikov добрый день! а поддерживает ли werf helm xxxx или werf bundle xxxx работу с сабчартами через http-прокси? (сработает ли использование HTTP_PROXY/HTTP...
Сергей Голод
4
Добрый день! Удалил все файлы с переменными из проекта, получил Error: release deploy: process resources: error validating adoptable resources: adoption validation failed: re...
Evgheni Mad
2
Привет! Вопрос про werf helm Приложение деплоится через werf helm upgrade --atomic Иногда(все условия для воспроизведения до конца непонятны, но есть версия, что это происходи...
𝓐𝓵͢͢͢𝓮𝔁 C
2
Всем привет. Сегодня добавили в приложение дополнительный образ nginx, в который докидывается системная статика прям в образ. При деплое бандлами деплоилось 200+ джоб(клиентов...
Владимир Муковоз
6
Добрый день, после перехода с версии 1.2 на 2.10 werf cleanup начал удалять использующиеся теги, и до и после обновления использовались дефолтные политики keepPolicies Подскаж...
Дмитрий
29
Блин а мне как поумнеть ?
Toxin
191
Друзья, добрый день. Прошу подсказать с базовым вопросом по использованию CI переменных gitlab в werf.yaml. Хочу в beforeInstall использовать env переменную с токеном. Мне нуж...
Anton Zol
10
Вопросик не совсем werf. Но вдруг мы подскажите воркэраунд или ещё что-нибудь. Могу ли я как-нибудь в моменте деплоя внутри heml рендера получить хэшсумму файла шаблона (./tem...
Alex Подрябинкин
11
Карта сайта