Как обрабатывать исключение с помощью onException() в Spring Boot Camel

Приложение Spring boot Apache Camel-Java DSL читает сообщения из темы Kafka.

@Component
public class KafkaTopicService extends RouteBilder {

    public void configure(){
       from("kafka:myTopic?brokers=localhost:9092")
           .log("Message received from Kafka: ${body}")}
}

Если я остановлю Кафку, я получу org.apache.kafka.common.errors.DisconnectException

Я просмотрел onException(...class).handled(true), но не знаю, как реализовать обработку исключения в моем коде. Может ли кто-нибудь дать мне несколько примеров реализации? Какие варианты доступны? Например, запись сообщения или повторная попытка прочитать сообщение? В документации также упоминается Quarkus. Нужен ли мне Quarkus для использования onException()?


person mat1    schedule 28.11.2020    source источник


Ответы (1)


Вы можете сделать что-то вроде (не пробовал запускать, поэтому позаботьтесь о любых опечатках)

@Component
public class KafkaTopicService extends RouteBilder {

    public void configure(){

        onException(org.apache.kafka.common.errors.DisconnectException.class)
            .log("Error connecting kafka");

        from("kafka:myTopic?brokers=localhost:9092&bridgeErrorHandler=true")
           .log("Message received from Kafka: ${body}")}
}

Обратите внимание, что я добавил bridgeErrorHandler=true. Обычно обработка исключений происходит после from. В большинстве случаев, используя bridgeErrorHandler, мы можем использовать для них функцию onException.

Также обратите внимание, что я определил onException за пределами вашего маршрута, поэтому логика обработки исключений, которую вы добавляете, будет глобальной и применимой ко всем маршрутам, где бы вы ни встречались DisconnectException

person Hemang    schedule 30.11.2020