2017-08-24 3 views
0

私の春休みアプリケーションでは、新しいユーザーを登録する方法を作成しました。その中にはすでに電子メールが登録されていることを確認する電子メールの複製チェックがあります。そうであれば、新しいユーザーが登録するという賢明な方法でエラーメッセージを返します。春休みの複製が100人のユーザーと同じ時間にサービスを実行している間に何度かスキップする

jmeterを使用して100人のユーザーでコードをテストしようとしていますが、重複チェックがスキップされることがあります。同じメールIDを持つ2人のユーザーを挿入します。現在のシステムのミリ秒を使用して電子メールIDを作成しています。 誰かがなぜこれが起こるのを助けてください。

答えて

1

これはスレッドの典型的な状況です。何とかそれらを同期させる必要があります。ミリ秒未満

  • 使用の何か(マイクロ秒、ナノ秒)それはよりランダムにするために別の値を追加し、同じ値

  • を得ることのチャンスを減らすために(スレッドID:それを解決するために多くのオプションがあります。例えば)

  • 使用AtomicLongそのincrementAndGet方法の代わりに(またはそれに追加)ミリ

  • はDATABのフィールドをマークユニークな(常に良いアイデア)aseなので、重複する値を挿入することはできず、例外がスローされます。コントローラでは、そのような例外をキャッチして電子メールを生成して再度保存しようとします

  • ​​として現在のミリ秒を取得しているメソッドをマークします。これにより、同じミリ秒を同時に呼び出すことはできません別のスレッド、2番目のスレッドは最初のスレッドを待機します)。それはうまくいくはずですが、遅いですから、最後にここに記載しました。

+0

registerUserメソッドを同期させることをお勧めしますか? – bijin

+0

私はそうは思わないが、もしあなたがそれをしなければならないなら、それは大丈夫だ。 –

関連する問題