2014-12-08 4 views
1

Я немного смущен тем, как модуль «источник: триггер» должен работать в Spring XD. На основе документации вы можете указать дату начала и фиксированную задержку, и теоретически поток, который определяет триггер, должен начинаться только в это время и повторяться на основе фиксированной задержки.Spring XD - модуль «источник: триггер» не работает должным образом

Например:

stream create --name s1 --definition "trigger --date='12/08/14 23:35:00' --fixedDelay=10 | log" --deploy 

При развертывании, этот поток, как ожидается, будет уволен в течение самого первого времени точно в 23:35:00 на 12/08/14 (используя формат даты = " MM/dd/yy HH: mm: ss "); однако, уволен только после того, как она развертывается, независимо от того, что время:

23:33:28,409 1.1.0.SNAP INFO DeploymentsPathChildrenCache-0 server.DeploymentListener - Deploying module 'trigger' for stream 's1' 
23:33:28,572 1.1.0.SNAP INFO DeploymentsPathChildrenCache-0 server.DeploymentListener - Deploying module [[email protected] moduleName = 'trigger', moduleLabel = 'trigger', group = 's1', sourceChannelName = [null], sinkChannelName = [null], sinkChannelName = [null], index = 0, type = source, parameters = map['date' -> '12/08/14 23:35:00', 'fixedDelay' -> '10'], children = list[[empty]]] 
23:33:28,946 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:33:28,954 1.1.0.SNAP INFO Deployer server.StreamDeploymentListener - Deployment status for stream 's1': DeploymentStatus{state=deployed} 
23:33:28,955 1.1.0.SNAP INFO Deployer server.StreamDeploymentListener - Stream Stream{name='s1'} deployment attempt complete 

Как показывают журналы, поток «s1» фактически вышла на 23:33:28, раньше, чем ожидалось. После запуска, это повторяется каждые 10 секунд в соответствии с настройками в фиксированной задержке:

23:33:38,952 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:33:48,956 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:33:58,961 1.1.0.SNAP INFO task-scheduler-4 sink.s1 - 
23:34:08,966 1.1.0.SNAP INFO task-scheduler-2 sink.s1 - 
23:34:18,969 1.1.0.SNAP INFO task-scheduler-2 sink.s1 - 
23:34:28,973 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:34:38,974 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:34:48,979 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:34:58,984 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:35:08,989 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:35:18,993 1.1.0.SNAP INFO task-scheduler-9 sink.s1 - 
23:35:28,998 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:35:39,003 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:35:49,009 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:35:59,013 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:36:09,017 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 
23:36:19,022 1.1.0.SNAP INFO task-scheduler-1 sink.s1 - 

Поэтому, почему этот поток не принимая во внимание параметра «дата», но просто срабатывает всякий раз, когда он развернут? Является ли это ошибкой или ожидаемым поведением в Spring XD? Если последний, как я могу настроить такой триггер, чтобы он срабатывал только в данный момент?

BTW, я начал вверх весна XD установка системное свойство «user.timezone» до «СЕТ», просто чтобы убедиться, что весна XD использует тот же TimeZone я работаю в.

ответ

0

Вы не возражаете, указывая к документации? На самом деле я не вижу хорошей документации для этого модуля даже в последней версии SNAPSHOT.

Модуль source:trigger основан на 3 профилях: date, cron или fixedDelay. Последний из них имеет приоритет над первой TriggerSourceOptionsMetadata:

@Override 
public String[] profilesToActivate() { 
    if (cron != null) { 
     return new String[] { "use-cron" }; 
    } 
    else if (fixedDelay != null) { 
     return new String[] { "use-delay" }; 
    } 
    else { 
     return new String[] { "use-date" }; 
    } 
} 

Я думаю, вы хотите использовать PeriodicTrigger#initialDelay. К сожалению, этот параметр Spring не отображается как опция XD.

Я не вижу каких-либо готовых способов преодолеть ваши требования, а не некоторые настройки этого модуля с помощью опции initialDelay для профиля use-delay.

Не стесняйтесь поднять JIRA вопрос о документации для source:trigger и поддержка initialDelay.

+0

Итак, основываясь на этом коде, это означает, что они не могут быть объединены, не так ли? Спасибо за ответ. –

+0

Нет, они не могут. На самом деле мы должны улучшить 'TriggerSourceOptionsMetadata # isValid()', что все эти опции являются взаимоисключающими. Пожалуйста, поднимите вопрос, чтобы рассмотреть их все. –

+0

Создан https://jira.spring.io/browse/XD-2494 для отслеживания этой проблемы – ebottard

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