преобразовани последовательности Рассмотрим следующий верблюд маршрут:распространения ошибки через Camel
from("file://....?moveFailed=/failed")
.resequence(c).stream()
.throwException(new Exception());
Я бы ожидать, что файл потребитель будет переместить обработанный файл в «отказавший /» папку, так как произошло исключение. Это не тот случай.
Поскольку StreamResequencer использует новый поток для доставки переупорядоченных файлов (см. Stacktrace), исключение никогда не распространяется на пользователя файла.
...
at org.apache.camel.processor.StreamResequencer$Delivery.run(StreamResequencer.java:262)
Я был бы признателен за помощь или обратную связь в том, как обеспечить, чтобы ошибки приводили к неудачному перемещению файла?
- Вариант 1: Распространение исключения для первоначального потребителя. Тем не менее, я не знаю, как бы это достичь.
- Вариант 2: Напишите пользовательское '.onException (...)', которое перемещает файл вручную, а не полагаясь на пользователя файла, чтобы сделать это.
- Возможно, есть еще один, более правильный способ настроить этот маршрут, о котором я не думал?
Это дизайн как работает преобразовань последовательность, вам нужно будет использовать Нооп = True на файловой Урии, и переместить файл самостоятельно после преобразовани последовательности. И, может быть, просто лучше написать собственный сортировщик файлов или фильтр файлов, который принимает файл в нужном порядке. –
@ClausIbsen. Первоначально мы использовали сортировщик файлов, но из-за количества файлов эта сортировка не могла идти в ногу. Мы должны были убедиться, что заказ был правильным для каждого файла, поэтому мы сортировали каждый раз, когда мы брали один файл. Приоритетная очередь (resequencer) является лучшим вариантом в этом случае. --- Я последую вашим советам и перейду к варианту 2, при необходимости перемещая файл. Большое спасибо! – user2890248