email - MongoDB多步事务问题

标签 email mongodb transactions

如果我们需要更新客户文档并在同一事务中发送电子邮件,确保自动完成此操作的最佳方法是什么?我们正在构建一个 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/

相关文章:

javascript - Meteor 的电子邮件未定义

mongodb - 如何在 Docker 容器之间迁移 MongoDB 数据库?

java - 自定义 Spring 数据存储库 bean 名称以用于多个数据源

sql - 代码内部的事务

java - 为什么 Spring Roo 给 persist() Propogation.REQUIRES_NEW

php - 将变量从 PHP 传递到 javascript 并传递到 html 表单

php - Symfony 3.3 和 Swiftmailer - 由服务器延迟的 Controller 创建和发送的邮件

node.js - Express.js - 在 URL 中过滤一个 mongodb id

php - MySQL 事务 - 开始问题

ios - 如何使用 SKPSMTPMessage 发送电子邮件,它将在电子邮件客户端中正常解析?