2012-03-17 3 views
4

Недавно я начал играть с верблюдом Apache. Так что, будучи экспериментальным типом, я думал, что создам простой проект, который будет проверять каталог файлов каждые пару секунд, чтобы увидеть, есть ли у меня новый файл, который забирает этот файл, а затем копирует его в другую папку. Позже я хочу поместить эти файлы в базу данных.Опрос пользователей файлов в Apache

Так держать с основами первым я создал маршрут, такие как:

from("file://c:/CTest/inbox?noop=true") 
       .to("file://C:/Ctest/outbox"); 

Это сработало, и я думал, что хорошо позволяет добавить таймер. Первоначально я сделал ошибку, используя таймер и пытается это:

from("timer://myTimer?period=50").to("file://c:/CTest/inbox?noop=true") 
       .to("file://C:/Ctest/outbox"); 

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

Итак, из моего понимания файловый компонент использует запланированный шаблон опроса. Существует даже опция pollStrategy в шаблоне URL-адреса файла. Существует также потребительский EIP опроса.

Так вот где моя путаница наступает.

1) Если компонент файла использует запланированный шаблон опроса не использует/реализации опроса conumser EIP?

2) Как добавить простое расписание к файловому компоненту для использования файлов, скажем, каждые 30 секунд?

3) Как создать свою собственную опросную стратегию путем реализации org.apache.camel.PollingConsumerPollStrategy?

Я подозреваю, что я могу сделать что-то вроде этого:

from("file://c:/CTest/inbox?noop=true&pollStrategy=some-expression") 
       .to("file://C:/Ctest/outbox"); 

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

Благодаря Namphibian

+0

Не могли бы вы, пожалуйста, руководство, как вы использовали с) API (? Я не уверен, какая конфигурация должна быть выполнена и как? – Prateek

ответ

6

Camel предлагает функцию под названием routepolicy http://camel.apache.org/routepolicy.html

Это позволяет связать политику по маршрутам. Мы предоставляем ряд политик из коробки. Политикой может быть любая логика. Например, мы предлагаем политику дросселирования, которая на лету приостанавливает/возобновляет маршруты, основанные на потоках.

Другая политическая политика - это запланированная политика, поэтому вы можете указать «часы работы» для маршрута. Поэтому вы также можете использовать это. Но учтите его в часы работы, поэтому вы указываете время начала и окончания. Существует политика на основе кварцевого cron http://camel.apache.org/cronscheduledroutepolicy.html, поэтому вы можете настроить это, чтобы начать маршрут в понедельник, и пусть он работает некоторое время.

Если вам нужно остановить маршрут от в пределах маршрута, то вот немного сложнее, есть FAQ об этом здесь: http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

+0

Спасибо Клаус. Похоже, мне еще предстоит пройти долгий путь. Так можно ли запустить маршрут Camel из таймера или кварцевого компонента? Правильно поэтому я думаю, что нет правильного ответа, но когда вы будете использовать стратегию опроса, когда вы будете использовать политику маршрута, когда вы будете использовать задержку? Ваши мысли и опыт в этом отношении будут очень признательны. – Namphibian

+0

Это зависит от ваших потребностей. PollEnrich может одновременно загружать только один файл, поэтому он имеет свои ограничения, если ваш прецедент предназначен для сбора и обработки всех файлов из каталога. Если это так, то политика маршрута имеет больше смысла. –

3

1) Если компонент файла использует запланированный шаблон опроса делает это использование/осуществлять избирательный conumser EIP?

Да, производитель файлов реализует ScheduledPollEndpoint. Из doc:

Довольно много входящих Camel конечных точек используют запланированный шаблон опроса на получать сообщения и толкать их по путям обработки Camel. То есть, извне от клиента конечная точка, по-видимому, использует потребителя, управляемого событиями, но внутренне запланированный опрос используется для для мониторинга состояния какого-либо состояния или ресурса, а затем для сообщения об обстреле . Поскольку это такая общая схема, компоненты опроса могут расширить базовый класс ScheduledPollConsumer, который упрощает выполнение этого шаблона до .

2) Как добавить простое расписание к файловому компоненту для использования файлов sa каждые 30 секунд?

Использование delay опции:

from("file://c:/CTest/inbox?noop=true&delay=30000").to("file://C:/Ctest/outbox"); 

3) Как создать свой собственный pollingStrategy путем внедрения org.apache.camel.PollingConsumerPollStrategy?

Посмотрите на исходный код: DefaultPollingConsumerPollStrategy или LimitedPollingConsumerPollStrategy.

используется настраиваемый pollStrategy как это:

from("file://inbox/?pollStrategy=#myPoll").to(...) 

Где #myPoll я определен в более registry информации в нижней части страницы this.

+0

Привет, ebaxt. Хорошо, поэтому мне не нужно внедрять стратегию опроса, если я просто хотел опросить каждые 30 секунд. Я достигаю этого, используя опцию задержки (имеет смысл отметить, чтобы попытаться прочитать немного больше). Затем для более сложного сценария я бы определил bean-компонент и использовал его для определения графика, который, например, опроса каждый понедельник в 11:30? – Namphibian

+0

Я просто использовал задержку, и она работает как шарм. Я не могу поверить, что все так просто. Camel ROCKS !. Ответ на этот вопрос Я буду изучать пользовательскую стратегию опроса немного больше! Благодарю. – Namphibian

+0

Если вам нужно больше контролировать расписание опроса, вы можете использовать компонент кварца и использовать pollEnrich следующим образом: 'from (" quartXXXX ") .pollEnrich (" file: // xx ") .to (...);' – ebaxt

Смежные вопросы