CUSTOMERドキュメントを更新して同じトランザクションで電子メールを送信する必要がある場合、これが原子的に確実に行われるようにするにはどうすればよいでしょうか?私たちはeコマースのウェブサイトを構築しています。顧客が商品を購入したときに注文履歴を更新して確認メールを送信する必要があるため、この機能が必要です。 RDBMSデータベースを使用するJavaでは、データベースを簡単に更新し、電子メールの内容と詳細を含むJMSメッセージを送信することで、これを簡単に実行できます。 JDBCとJMSの両方が分散トランザクションをサポートしているので、何かがうまくいかないとロールバックできますが、MongoDBではそうではありません。 Mongoにメッセージング機能はありますか?MongoDBマルチステップトランザクションの問題
私たちは、お客様のorderHistory埋め込まれた文書にフラグ「emailSentFlag」を使用する方法について考えていました。注文が行われると、フラグはfalseに設定されます。 emailSentFlag = "false"のすべての注文履歴をスキャンしてその時点でメールを送信する外部ジョブを使用しますが、送信後にフラグを "true"に戻す必要があるため、同じ状況に戻ります電子メール、それはアトミックではありません。
> customer {
> name:
> email:
> orderHistory{
> orderId:
> status:
> emailSentFlag:
注意してください! MongoDBはトランザクションをサポートしていません! http://www.mongodb.org/display/DOCS/Developer+FAQ#DeveloperFAQ-HowdoIdotransactions%2Flocking%3F – DavidJBerman
私はそれを知っていますが、私は両方の操作を一緒に働かせる必要があります。 – raffian
JMSは、メールが1回だけ正確に送信されることをどのようにして確認しますか?確かに、それをキューに入れて少なくとも1回は処理されるようにすることができますが、smtpにメールを送信した直後に、完了したジョブを設定する前にクラッシュする可能性があります。何か不足していますか? –