当前位置: 首页 > 知识库问答 >
问题:

SPRING BATCH:如何为任务执行器中运行的多个作业配置远程分块

穆阳嘉
2023-03-14
<bean id="chunkWriter"
    class="org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter" scope="step">
    <property name="messagingOperations" ref="messagingGateway" />
    <property name="replyChannel" ref="replies" />
    <property name="throttleLimit" value="50" />
    <property name="maxWaitTimeouts" value="60000" />
</bean>

<bean id="chunkHandler"
    class="org.springframework.batch.integration.chunk.RemoteChunkHandlerFactoryBean">
    <property name="chunkWriter" ref="chunkWriter" />
    <property name="step" ref="someJobId" />
</bean>

<integration:service-activator
    input-channel="requests" output-channel="replies" ref="chunkHandler" />
java.lang.IllegalStateException: Message contained wrong job instance id [9331] should have been [9332].
at org.springframework.util.Assert.state(Assert.java:385) ~[Assert.class:4.1.6.RELEASE]
at org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter.getNextResult    

请帮我做这个。

共有1个答案

霍建章
2023-03-14

ChunkMessageChannelItemWriter只为一个并发步骤设计-您需要将其放在步骤范围内,以便每个作业都得到自己的实例-请参见此测试用例

编辑

实际上,没有;这是行不通的--因为bean实例使用相同的应答通道,它们可以获得彼此的应答。我开了一个JIRA问题。

 类似资料:
  • 我们有现有的Spring批处理应用程序,我们希望使其可扩展以在多个节点上运行。 例如,我希望在不同的工作服务器上运行作业。在这种情况下,我有一个作业a和一个作业B,在worker server的一个实例上运行作业a,在worker server的另一个实例中运行作业B。 在spring batch integration文档中,我找到了一个关于SETP远程分区的解释。然而,我不知道如何从主服务器启

  • 我注意到terraform只会在资源上运行“file”、“remote exec”或“local exec”一次。一旦资源被调配,如果“远程执行”中的命令被更改,或者调配器“文件”中的文件被更改,则terraform将不会对实例进行任何更改。那么,如何让terraform在每次运行terraform应用时都运行provisioner“file”、“remote exec”或“local exec”

  • 一个spark有一个oracle查询。所以我必须并行运行多个作业,以便所有查询都将同时激发。 如何并行运行多个作业?

  • 我正在使用Eclipse的STS插件创建gradle多项目。我以为我在读完教程后得到了基本的知识,但我无法再现所显示的行为。添加时 对于父项目的build.gradle,我将假设每个项目执行的任务'hello‘。为子项目实际进行了2次,但结果只是: 我的项目树看起来或多或少是这样的:

  • 我有一个Spark 2.1.1作业,正在Mesos集群中运行。Spark UI显示32个活动执行器和RDD。getNumPartitions显示28个分区。但只有一个(随机)执行者在做任何工作,所有其他执行者都标记为已完成。我向执行器代码(stdout)添加了调试语句,只有一个执行器显示这些语句。整个管道的结构如下:获取ID列表- 这些是Spark二进制文件的配置设置:--drive-内存32g-

  • 主要内容:1 如何使用多个线程执行一个任务,2 如何使用多个线程执行多个任务1 如何使用多个线程执行一个任务 如果需要由多个线程执行单个任务,则只有一个run()方法,例如: 1.1 多个线程执行一个任务示例1 输出结果为: 1.2 多个线程执行一个任务示例2 输出结果为: 注意:每个线程在单独的堆栈中运行。 2 如何使用多个线程执行多个任务 如果必须通过多个线程执行多个任务,请使用多个run() 方法: 2.1 多个线程执行多个任务示例1 输出结果为: 2.2 多个线程