我们有一个用例,需要从一些分页的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分区作业的任何输入或参考
1条答案
按热度按时间3npbholx1#
在这样的设置中
MessageChannelPartitionHandler
应该是步骤范围。javadoc中有一个关于这一点的注解:将此bean步骤限定为作用域应该可以解决此问题。