在我的环境中,我需要安排长时间运行的任务。我有应用程序 A,它只向客户端显示当前正在运行的任务列表并允许安排新任务。还有应用程序 B 进行实际的艰苦工作。
所以应用 A 需要在应用 B 中调度一个任务。它们唯一的共同点就是数据库。最简单的做法似乎是添加一个包含任务列表的表,并让应用程序 B 每隔一段时间查询该表并执行新计划的任务。
然而,这似乎不是正确的做法。乍一看,企业环境中的工作工具似乎是消息队列。应用 A 向队列发送带有任务描述的消息,应用 B 从队列中读取消息并执行任务。在这种情况下,应用程序 A 是否有可能在不创建像上面提到的那样的表的情况下获取所有已调度任务的状态(持久队列?),应用程序 B 会将已完成任务的状态写入该表?另请注意,应用程序 A 可能有多个实例,并且每个实例都需要了解所有实例的所有任务。
“表格方法”的缺点是我需要进行数据库轮询。
“消息队列方法”的缺点是我在基础设施中引入了一个新的通信通道(另一件事可能会失败)。
你怎么看?还有其他想法吗?提前感谢您的任何建议:)
========== 更新 ==========
最终我决定采用以下方法:这个问题有两个方面:一个是 A 和 B 之间的通信。另一个是获取有关任务的信息。
对于通信来说,适合这项工作的工具是 JMS。为了获取数据,正确的工具是数据库。所以我会让应用程序 A 在“任务”表中添加一个新行来描述一个任务(我可以稍后查询这个表以获取所有任务的列表)。然后 A 将通过 JMS 向 B 发送一条消息,只是说“你有工作要做”。B 将完成工作并更新表中的任务状态。
感谢您的所有回复!