如何创建一个弹出批处理作业来协调跨多个系统的外部工作?

时间:2015-12-16 17:59:42

标签: spring-batch

我有一个场景,我认为它超出了春季批量的范围,但我想解释一下我的情况,看看是否有人有任何想法。我有一个像这样的批处理工作流程:

  1. 将平面文件加载到数据库中
  2. 向另一个系统发送消息以开始工作
  3. 等待其他系统完成工作(假设我可以轮询数据库表以等待状态标志变为某个值)
  4. 其他系统完成后,转到我的工作中的下一步,读取一些数据库记录并写入文件
  5. 我想到了这两种方法:  1.将上述工作流分为两个弹簧批处理作业:一个用于步骤1-2,另一个用于步骤4.让其他一些进程执行数据库轮询以触发第二个作业。  2.在一个睡眠的tasklet中进行轮询,然后轮询并返回一个状态,指示我们是否需要再次轮询。

    选项1没问题,但现在我失去了监控我所拥有的整体“工作”状态的能力。我将不得不创建自己的UOW进度监控,跟踪各个弹簧批处理作业。

    选项2为每个作业吃掉一个帖子。如果我有数百个可能正在等待的工作,我真的不希望每个人单独进行一次轮询并且只是为了睡觉而吃掉一个线程。

    我知道商业工作流程引擎Flux具有工作流程的概念,该工作流程遇到需要在外部发信号然后恢复的“等待”点。这样做会很好 - 有一些外部进程(一个线程)让一组作业处于等待状态,轮询以查看是否有任何准备继续前进,并发出信号。然后春季批次上升并继续下一步工作。

    也许我可以通过失败工作并重新启动来近似某事?但是,我无法区分真正失败的工作和春季批量管理网络应用程序中的正常“等待”状态之间的区别。

    任何聪明的想法?有人知道有任何计划将此类功能添加到春季批次吗?

0 个答案:

没有答案