Потребитель файла опроса в Apache - PullRequest
4 голосов
/ 17 марта 2012

Я недавно начал играть с верблюдом 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");

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

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

Так вот, где начинается мое замешательство.

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

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

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

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

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

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

Спасибо Namphibian

Ответы [ 2 ]

7 голосов
/ 17 марта 2012

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

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

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

3 голосов
/ 17 марта 2012

1) Если файловый компонент использует шаблон опроса по расписанию, использует ли он / реализует 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 .

Вы используете пользовательскую стратегию poll, подобную этой:

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

Где #myPoll определен в реестре Дополнительная информация внизу this стр.

...