私は電子商取引の Web サイトに取り組んでおり、解決しようとしている問題があります。顧客が注文を完了した後、1 通ではなく 3 通のメール (すべて同じ) が届きます。Web サイトは 3 つのサーバーで実行されていますが、1 つのサーバーのみを使用すると顧客に配信されるメールが 1 つになるため、それが問題であると考えています。ユーザーが 3 通ではなく 1 通の電子メールを受け取り、ウェブサイトを 3 台のサーバーで実行できるようにするにはどうすればよいか知りたいです。前もって感謝します、 ラツィアーレ
1 に答える
これについては、データベース内のロック ヒントを期待することはできません。ヒントは単なるヒントです。ロックが期待どおりに行われるという保証はありません (これが SQL Server であると仮定します)。一般に、リレーショナル データベースは単なるデータベースです。テーブルはキューイング メカニズムではなく、そのように使用しようとすると常に問題が発生します。
それにもかかわらず、別のソリューションを実装するには、単一のレコードが「キュー」に追加されているのか、それとも 3 つのレコードが追加されているのかを判断する必要があります。それが最初で、1 つのレコードのみが追加され、3 つの電子メールが送信される場合、解決策は簡単です。データベース テーブルをキューとして使用する代わりに、Microsoft メッセージ キュー (MSMQ) を使用します。それらは Windows Server の一部であり、少なくとも 2003 年から、おそらく 2000 年までさかのぼります。達成しようとしていることに合わせて特別に設計された実際のキューを提供します。
データベースの「キュー」テーブルに 3 つの実際のレコードが追加されている場合は、コードに問題があることを意味します。ロード バランサーに 3 つの Web サーバーがある場合でも、1 つの注文の送信がそれらのサーバーの 1 つだけで行われるという事実は変わりません。電子メール通知をキューに配置するビジネス ロジックは、要求が 1 つのサーバーからのみ発生するため、複数のサーバーから送信されることはありません。
最初にテーブルをチェックして、複数のレコードが追加されているかどうかを判断します。そうでない場合は、MSMQ を使用するように実装を変更します。その場合は、コードをチェックして、リクエストに複数のレコードが追加されている理由を確認してください。