Как Spring-XD обрабатывает выполнение заданий

Я не могу получить информацию из документации. Может ли кто-нибудь сказать мне, как Spring-XD выполняет задания? Назначает ли он задание определенному контейнеру, и выполняется ли это задание только в контейнере, в котором оно развернуто, или каждое выполнение задания назначается другому контейнеру? Могу ли я каким-то образом контролировать, чтобы одно задание могло выполняться параллельно (с разными аргументами), а другое — нет?

Спасибо! Питер


person Peter Rietzler    schedule 22.04.2014    source источник


Ответы (1)


Я уверен, что вы видели часть документации здесь: https://github.com/spring-projects/spring-xd/wiki/Batch-Jobs

Чтобы ответить на ваши вопросы:

Может ли кто-нибудь сказать мне, как Spring-XD выполняет задания? Назначает ли он задание определенному контейнеру, и выполняется ли это задание только в контейнере, в котором оно развернуто, или каждое выполнение задания назначается другому контейнеру?

После того, как вы создадите новое определение задания, используя это:

xd>job create dailyfeedjob --definition "myfeedjobmodule" --deploy

модуль пакетного задания myfeedjobmodule развертывается в контейнере XD. После развертывания в брокере сообщений есть настройка очереди запуска заданий: Redis, Rabbit или Local. Имя очереди job:dailyfeedjob в брокере сообщений. Поскольку эта очередь привязана к модулю задания, развернутому в контейнере XD, сообщение запроса, отправленное в эту очередь, выбирается модулем задания, развернутым внутри этого конкретного контейнера.

Теперь вы можете отправить сообщение запроса на запуск задания (с параметрами задания) в очередь job:dailyfeedjob, просто настроив поток, который отправляет сообщение в эту очередь. Например: это может сделать триггер (с фиксированной задержкой, cron, триггеры даты). Это также команда job launch из оболочки, которая запускает задание только один раз. Этот раздел объяснит это подробнее: https://github.com/spring-projects/spring-xd/wiki/Batch-Jobs#launching-a-job

Следовательно, задание запускается (каждый раз, когда оно получает запрос на запуск задания) только внутри контейнера, в котором развернут модуль задания, и вы можете ожидать исходный пакетный поток Spring при выполнении задания. (обратитесь к документу оболочки для всех команд, связанных с заданием)

Могу ли я каким-то образом контролировать, чтобы одно задание могло выполняться параллельно (с разными аргументами), а другое — нет?

Если это разные параметры задания для одного и того же определения задания, то оно будет отправлено в тот же контейнер, где развернут модуль задания. Но вы по-прежнему можете создать новое определение задания с тем же модулем пакетного задания.

xd>job create myotherdailyfeedjob --definition "myfeedjobmodule" --deploy

Единственная разница в том, что он будет находиться в этом пространстве имен. и имя очереди запуска задания будет job:myotherdailyfeedjob. Все зависит от того, как вы хотите организовать выполнение пакетных заданий.

Кроме того, для параллельной обработки пакетных заданий вы можете использовать: http://docs.spring.io/spring-batch/reference/html/scalability.html

и XD обеспечивает поддержку одношагового разделения для выполнения пакетных заданий:

Включите это в свой рабочий модуль:

<import resource="classpath:/META-INF/spring-xd/batch/singlestep-partition-support.xml"/>

с определенными bean-компонентами разделителя и тасклета.

Вы можете попробовать некоторые примеры пакетов XD здесь: https://github.com/spring-projects/spring-xd-samples

person Ilayaperumal Gopinathan    schedule 22.04.2014