我正在通过 Classroom API 在基于 Django REST 的 LMS 和 Google Classroom 之间进行集成。
使用信号,当某些操作在我的 LMS 中发生时,我从“集成类”调度特定操作,最终触发对 Classroom API 的 API 调用。
我将集成类方法作为 Celery 任务运行。我不想在我的集成类中编写与 Celery 任务相关的逻辑,以便将业务逻辑与与执行方法相关的逻辑分开,所以我创建了一个任务来接收方法名称和kwargs 并使用给定的 kwargs 运行该方法。
由于集成类的方法接受模型实例作为参数,我还通过将它们转换为 pk 并在任务内部查询它们来执行参数的“(un)编组”:
这里是问题:
一些任务依赖于之前成功运行的其他任务;但是,这些任务不会一起运行。
我举个例子:当一个学生在我的 LMS 中注册了一门课程时,他们也同时注册了 Classroom 上的配对课程。稍后,当学生参加我的 LMS 中的考试时,它与课堂上的 courseWork 项目配对,他们的 studentSubmission 更新为包含链接附件,链接到我的 LMS 上的参与。
问题是:如果用户没有注册 Classroom 课程,studentSubmission 可能不存在(Classroom 会自动为每个注册的学生创建一个提交,并且不允许直接创建提交)。
所以,在某种程度上,更新 studentSubmission 的任务取决于注册学生成功运行的任务。所以这是第一个问题。
相关问题:假设注册任务失败,因此,studentSubmission 更新任务也失败。如果稍后我能够在课堂上成功注册学生,我希望能够重试提交更新任务。
解决这些问题的合理方法是什么?