0

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

谢谢!彼得

4

1 回答 1

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来自 shell 的命令,它只启动一次作业。本节将对其进行更多解释:https ://github.com/spring-projects/spring-xd/wiki/Batch-Jobs#launching-a-job

因此,作业仅在部署作业模块的容器内启动(每次收到作业启动请求),并且您可以在作业执行时期待原始的 spring 批处理流。(有关所有与作业相关的命令,请参阅 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"/>

定义了 partitioner 和 tasklet bean。

您可以从这里试用一些 XD 批处理示例: https ://github.com/spring-projects/spring-xd-samples

于 2014-04-22T17:15:15.063 回答