Перейти к содержимому
9 / 15

Ошибка в обработчике сообщения: пропустить, повторить, отложить или остановиться?

Реакция зависит от типа ошибки, и первое, что делают, — разделяют их. Временные (недоступна база, таймаут внешнего сервиса, ограничение скорости) лечатся повтором с экспоненциальной задержкой: сообщение вернётся и будет обработано. Постоянные (сообщение не проходит валидацию, ссылается на несуществующую сущность, несовместимая схема) повторять бессмысленно — они отправляются в очередь недоставленных с контекстом ошибки. Ядовитое сообщение — постоянная ошибка, которую обрабатывают как временную: потребитель бесконечно повторяет её, лаг растёт, обработка встаёт; поэтому предел числа попыток обязателен. Отдельный класс — сбой всего потребителя (кончилась память, потеряно соединение с брокером): здесь правильнее остановиться и дать оркестратору перезапустить процесс, а не глотать исключение. В Kafka обработку недоставленных обычно строят через отдельный топик, потому что «отложить одно сообщение» в логе нельзя — оффсет двигается только вперёд.

Ошибка в обработчике сообщения: пропустить, повторить, отложить или остановиться? | JScriptiser