продублировать еще сюда, может тут подскажут.
Использую spring-kafka и хочу сделать handler для ситуации, когда брокер kafka недоступен. Сейчас KafkaListener стартует при запуске приложения и если брокер кафка недоступен, то приложение просто не стартует.
Пробовал в ConcurrentKafkaListenerContainerFactory устанавливать setErrorHandler и setMissingTopicsFatal, но все равно не ловится исключение. Может кто подсказать как это реализовать?
Полагаю, вам нужно повесить листенер на NonResponsiveConsumerEvent По доке: An event that is emitted when a consumer is not responding to the poll; a possible indication that the broker is down.
Да, листеннер повесил (но чет даже с ошибочным вводом ip-адреса кафка брокера он не отрабатывает, но это скорее всего мои косяки я перепроверю). Проблема была в другом. Я тестил недоступность кафка брокера путем указания кривого dns имени (которого в сети нет). При таком варианте приложение не стартует в целом с ConfigException, что не может найти указанный DNS. Но если DNS есть, но брокера kafka на этом адресе нет, то в целом приложение остается запущенным и в лог начинает писать сообщения о том , что не удалось установить соединение с кафка брокером. На текущий момент меня такое в целом устраивает, но наверное хотелось бы защитится еще и от указания неверного DNS имени в параметрах кафка брокера и отлавливать это Exception.
Хм, если только в java-конфиге создавать KafkaMessageListenerContainer или что там, где и ловить исключение. Но, поскольку нужно вернуть бин, то придется возвращать null в случае выброса исключения, и делать null-чек там, где этот бин инжектится. Другого решения я так сходу не вижу...
Обсуждают сегодня