Spring XD - Источник модуля: триггер не работает должным образом

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

Например:

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

Ожидается, что при развертывании этот поток будет запущен в самый первый раз ровно в 23:35:00 08.12.14 (с использованием формата даты = "ММ/дд/гг ЧЧ:мм:сс"); однако он запускается сразу после развертывания, независимо от времени:

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 [ModuleDescriptor@760ca434 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? Если последнее, как я могу настроить такой триггер, чтобы он срабатывал только в определенное время?

Кстати, я запустил Spring XD, установив для системного свойства «user.timezone» значение «CET», просто чтобы убедиться, что Spring XD использует тот же часовой пояс, в котором я работаю.


person Enrique Medina    schedule 08.12.2014    source источник


Ответы (1)


Не могли бы вы указать на документацию? На самом деле я не вижу хорошей документации для этого модуля даже в последнем 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.

person Artem Bilan    schedule 09.12.2014
comment
Итак, исходя из этого кода, это означает, что они не могут быть объединены, не так ли? Спасибо за ответ. - person Enrique Medina; 09.12.2014
comment
Нет, они не могут. На самом деле мы должны улучшить TriggerSourceOptionsMetadata#isValid(), чтобы все эти параметры были взаимоисключающими. Пожалуйста, поднимите вопрос, чтобы решить их все. - person Artem Bilan; 09.12.2014
comment
Также создан jira.spring.io/browse/XD-2482 для добавления поддержки initialDelay. - person Enrique Medina; 11.12.2014