2014-12-05 8 views
0

Я работаю над проектом, где нам нужно проанализировать файл размером> 2 ГБ и загрузить данные в БД. Я планирую разбить файл, используя сплиттер верблюда, в 50 разных файлов, а затем обрабатывать каждый из них с помощью Apache Camel.Camel LoadBalancing & Failover Handling

Мой вопрос:

Если при обработке одного файла, верблюд маршрут не работает, то как я могу остановить маршрут верблюда и аудит это в БД с именем файла. Может случиться так, что некоторые из записей обрабатываются и загружаются в БД и для определенных записей, которые он не загружает в БД. Поэтому нам нужно записать эту конкретную запись в другой файл.

Также во время обработки, если поддержка из-за сбоев в работе сети БД остановлена, то в этом случае обработка файла является неполной. Итак, как обрабатывать этот неполный сценарий обработки файлов, так как только оставшиеся записи должны быть обработаны снова.

+0

Возможно, вам лучше использовать пакетную структуру, такую ​​как Spring Batch (которая также может быть встроена в Camel). –

ответ

1

Поскольку вы намерены разделить входящий файл, я предполагаю, что ваши записи не имеют взаимозависимостей.

Вместо того, чтобы разбивать большой файл на множество файлов, а затем обрабатывать их, пытаясь сохранить некоторый контекст исходного файла, вы можете использовать сплиттер для разделения вашего большого входного файла по строкам. Сплиттер можно использовать в потоковом режиме, чтобы сначала не загружать большой входной файл в память. Затем поместите каждую строку в очередь SEDA/сообщений. В принимающей стороне используйте параллельных пользователей для параллельной обработки.

Компонент файла устанавливает заголовок обмена с текущим обрабатываемым именем файла. Заголовок должен быть сохранен во время разделения и передачи. Если один из ваших потребителей терпит неудачу, обработчик ошибок маршрута потребления должен иметь информацию об имени исходного файла для ведения журнала. Ваши потребители будут продолжать обрабатывать сообщения, даже если одно сообщение может провалиться. Поэтому нет необходимости выяснять, где взять обработку.