如果我们需要更新客户文档并在同一事务中发送电子邮件,确保自动完成此操作的最佳方法是什么?我们正在构建一个 ecomm 网站,我们需要此功能,因为当客户购买商品时,我们必须更新他们的订单历史记录并向他们发送电子邮件确认。在使用 RDBMS 数据库的 Java 中,我们可以通过简单地更新数据库并发送包含电子邮件内容和详细信息的 JMS 消息来轻松完成此操作; JDBC 和 JMS 都支持分布式事务,因此如果出现问题都可以回滚,但 MongoDB 则不然。 Mongo 中有消息传递功能吗?
我们正在考虑在客户的 orderHistory 嵌入文档中使用标志“emailSentFlag”。当下订单时,该标志设置为 false。然后,我们将使用一个外部作业来扫描 emailSentFlag="false"的所有订单历史记录,并在此时发送电子邮件,但这使我们回到相同的情况,因为我们必须在发送后将标志设置回“true”电子邮件,这不是原子的。
> customer {
> name:
> email:
> orderHistory{
> orderId:
> status:
> emailSentFlag:
最佳答案
正如其他人所说,Mongo 中没有交易。
我建议您构建一个邮件队列,而不是设置一个标志,然后搜索整个集合。我宁愿将一个条目放入邮件队列中,然后使用外部作业处理该队列。
至少这是我首先尝试做的事情。大家有什么好或坏的评论吗?
关于email - MongoDB多步事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711511/