Я уверен, что вы видели часть документации здесь: 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