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