Я использую XML для интеграции Spring и хочу знать, как лучше всего справляться с обработкой ошибок.
Я подключаюсь к s3 с помощью s3-inbound-streaming-channel-adapter, а затем преобразую файл csv из ведра s3.
Возможные ошибки:
LineTransformationException
Что делать, если в корзину s3 файл изображения помещен по ошибке и снова может получить исключение преобразования
s3 может выйти из строя и получить
Вызвано: com.amazonaws.SdkClientException: невозможно выполнить HTTP-запрос: подключение к localhost: 4572 [localhost / 127.0.0.1] не удалось: соединение отклонено
И список многих известных и неизвестных ошибок можно продолжать ...
Так как же Лучший справляется со всеми этими ошибками? Через кастомный ErrorHandler или exception-type-router
Если делать это через ErrorHandler, то как обслужить такое количество исключений.
И есть ли универсальный обработчик исключений?
открытый класс ErrorHandler {
public void handleFailure (сообщение errorMmessage) {
MessagingException payload = (MessagingException) errorMmessage.getPayload();
LOG.info(">>--- Exception --- " + payload.getCause());
}}
или же
<int:exception-type-router input-channel = "errorChannel"
default-output-channel = "nullChannel">
<int:mapping exception-type = "com.api.exception.TransformationException"
channel = "transformErrorChannel"/>
<int:mapping exception-type = "com.amazonaws.SdkClientException"
channel = "clientErrorChannel"/>
</int:exception-type-router>
<int:channel id = "transformErrorChannel"/>
<int:service-activator ref = "errorHandler"
method = "handleFailure"
input-channel = "transformErrorChannel"
output-channel = "nullChannel"/>
<int:service-activator ref = "clientErrorHandler"
method = "handleFailure"
input-channel = "clientErrorChannel"
output-channel = "nullChannel"/>
s3-inbound-streaming-channel-adapter вместе с <poller> можно настроить с помощью error-channel. По умолчанию ошибка опроса (и, следовательно, все нисходящие потоки) маршрутизируются на глобальный errorChannel: https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/configuration.html#namespace-errorhandler
Также как отключить LoggingHandler? поскольку он постоянно выводит след этапа.
Вы можете объявить, что владеете компонентом errorChannel. Таким образом, LoggingHandler будет отключен.
Спасибо. Я использовал собственный обработчик ошибок с двумя методами, один для обработки исключения преобразования, например. messageHandlingFailure (сообщение Message <MessageTransformationExceptio n>), а другой - для обработки любых других ошибок типа, например. handleFailure (сообщение <MessagingException>). Как вы думаете, это правильно?