在编写Web应用程序时,尤其是Django,有时我们会有一组必须全部成功或全部失败的操作(以确保某种类型的可预测状态)。很明显,当我们使用数据库时,我们可以使用事务。
但在某些情况下,在数据库上下文之外需要这些(全部或全部)约束
(例如,如果付款成功,我们必须发送产品激活码或其他风险客户投诉等)
但是让我们说在一些命运的日子里,由于一些临时的网络错误(持续了1个多小时),send_code()
功能一次又一次失败
我应该记录错误,并手动修复问题,例如手动发送邮件
我应该设置某种工作队列,当事情失败时,他们只是回到队列的末尾以便将来重试?
如果日志/排队系统也失败了怎么办? (我现在担心的太多了吗?)
答案 0 :(得分:1)
我们在公司使用微服务,至少每月一次,我们的微服务有一段时间了。我们在向用户发送产品之前的每个步骤的付款流程和状态都有Transaction
模型。如果出现问题或其中一个连接的微服务出现问题,我们会将其标记为status=error
并保存到数据库中。然后我们使用cron job来查找并完成这些过程。你需要在开始时尝试一些东西,如果不符合你的需要,可以尝试其他的东西。