spring批处理集成远程分区-运行并行作业

3b6akqbq  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(333)

我们有一个用例,需要从一些分页的api读取数据,然后写入一些下游的kafka主题。
我们已经能够通过spring batch integration远程分区来实现该解决方案,在远程分区中,管理器通过创建executioncontext来对任务进行分区,executioncontext包含用于读取数据的页码和偏移量。manager创建这个executioncontext并将它们放在messagingchannel上(我可以使用rabbitmq和kafka主题,以提供解决方案的为准)。工作人员(超过1名)从messagingchannel中选择这些executioncontext,并完成从api读取数据并将其写入所需kafka主题的任务。
上面的实现工作得很好。如果我一个接一个地为不同的客户端运行同一个作业,这也可以很好地工作。当我们想要为多个客户端并行运行同一个作业时,挑战就来了。例如,我们并行启动两个客户端的作业。它为每个客户创建1名经理和2名工人。现在问题来了,当两个经理在同一个messagingchannel上推送executioncontext时,工作人员不知道选择并执行哪一个。而且,这两个作业共享相同的数据库spring批处理表,因此我怀疑这也会在该级别产生问题。
关于如何实现并行运行多个spring batch reporter分区作业的任何输入或参考

3npbholx

3npbholx1#

在这样的设置中 MessageChannelPartitionHandler 应该是步骤范围。javadoc中有一个关于这一点的注解:

Note: The reply channel for this is instance based.
Sharing this component across multiple step instances may result in the
crossing of messages. It's recommended that this component be step or job scoped.

将此bean步骤限定为作用域应该可以解决此问题。

相关问题