我无法从文档中获取信息。谁能告诉我Spring-XD如何执行工作?它是否将作业分配给某个容器并且此作业是仅在部署到的容器上执行的,还是每个作业执行分配给另一个容器?我可以以某种方式控制某个工作可以并行执行(使用不同的参数)而其他工作可能不会吗?
谢谢! 彼得
答案 0 :(得分:1)
我相信你会在这里看到一些文档: https://github.com/spring-projects/spring-xd/wiki/Batch-Jobs
回答你的问题:
有谁能告诉我Spring-XD如何执行作业?它是否将作业分配给某个容器,并且该作业是仅在部署到的容器上执行的,还是将每个作业执行分配给另一个容器?</ p>
使用以下方法创建新作业定义后:
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
因此,仅在部署作业模块的容器内启动作业(每次收到作业启动请求时),并且在执行作业时可以预期弹出批处理流的原始作业。 (有关所有与作业相关的命令,请参阅shell文档)
我能以某种方式控制某项工作可以并行执行(使用不同的参数)而其他工作可能不会吗?
如果是针对同一作业定义的不同作业参数,则它将转到部署作业模块的同一容器中。 但是,您仍然可以使用相同的批处理作业模块创建新的作业定义。
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