我正在寻找一些好的库来处理Java(或.NET)中的任务(或者我们称之为“我们的域模型”的操作)。我们将要在数据库中执行的每个操作保存下来,然后需要一些机制来从数据库中提取未处理的任务,处理它们,并以正确的状态更新数据库记录(“已处理好”/“进程错误”)。
诀窍是操作可以相互依赖。例如,当处理“操作付款”时,系统可能会发现我们需要执行“操作检查付款数据”之前-因此它应该在数据库中创建新的操作行,暂停执行“操作付款”,然后依次处理“操作检查付款数据”,完成后返回处理“操作付款”。
我现在就告诉你我们是如何处理这件事的。
我们有DB表“operations”。类似cron的机制每分钟运行一次,并从db中提取前100个未处理的操作并进行处理。如果(处理时)系统发现执行当前操作(A)需要其他操作(B),则创建新的操作(B)记录并停止执行当前操作(A)。下一分钟cron将获取操作a和b。由于操作a未被处理,因此将获取操作a,但系统会看到已创建依赖操作b,因此不会再次创建它。操作B已处理,状态“已处理好”保存在数据库的适当行中。下一分钟,cron从db获取操作a,并最终可以执行它,因为依赖任务已完成。
我们正在寻找使它更简单、更好、更优雅的方法。