2014-04-22 58 views
0

我无法从文档中获取信息。任何人都可以告诉我Spring-XD如何执行作业?它是否将作业分配给某个容器,并且该作业是仅在其部署到的容器上执行的,还是将每个作业执行分配给另一个容器?我能以某种方式控制某个工作可以并行执行(使用不同的参数),而其他人则不可以?Spring-XD如何处理作业

谢谢! 彼得

回答

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,日期触发器)可以做到这一点。这也是一个来自仅启动作业一次的shell的job launch命令。 本节将更多解释:https://github.com/spring-projects/spring-xd/wiki/Batch-Jobs#launching-a-job

因此,这项工作启动(它接收作业启动要求每次)只有在工作模块部署的容器内,你可以期望原来的春天批量流量时工作被执行。 (参考外壳DOC对所有作业相关的命令)

我可以以某种方式控制以某项工作可以并行执行(使用不同的参数)和其他人可能不?

如果是针对不同的作业参数同样的工作定义,那么它会去哪里工作模块部署在同一个容器中。 但是,您仍然可以使用同一个批处理作业模块创建新的作业定义。

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"/> 

定义了分区程序和tasklet bean。

您可以从这里试用一些XD批次样品: https://github.com/spring-projects/spring-xd-samples