クラスタ環境で石英+春を使用して実行するジョブはほとんどありません。これらのジョブはクラスタ化環境で実行するように設定されていないので、各ジョブは所有しているインスタンスの数に基づいて複数回実行されます。これらのジョブはAWS環境で実行されます。動的に増減することができるインスタンス数は不明です。私たちはコードをリファクタリングしています。石英スプリングデザインの提案
問題は、特定のアクティビティに基づいてユーザーに電子メールを送信する仕事の例を挙げることができます。毎日1000人のユーザーが電子メールを送信する必要があります。
現在、クラスタ化された環境で実行するように設定されているわけではないため、各インスタンスはジョブを実行し、そのアクティビティについてユーザーに電子メールを送信します。 3つのインスタンスを実行している場合、ジョブは3回実行され、同じ電子メールがユーザーに3回送信されます。
私たちは、ジョブが1回だけ実行されることを確認するために、quartz jdbcを使用することに決めました。
私は以下の部分を行う方法に関する提案を探しています。
私は、300人のユーザーに電子メールを送信し、1人のインスタンスを実行しているジョブではなく、300人のユーザーに電子メールを送信する必要があると私はDBから300人のユーザーを取得し、他のインスタンスも300人のユーザーの処理に参加します。それを行う最良の方法は何でしょうか。私は一時テーブルに300人のユーザーを保存し、DBからユーザーを選んで欲しいとは思わない。そこに300人のユーザーをmemcachedのようなグローバルメモリに保存し、そこからデータを取り出す別のインスタンス(仕事を処理しているときの負荷分散の一種)で仕事をする方法があります。私はmemcacheを使用したくないので、他のオプションを利用することもできるし、最善の方法で私は設計を進めることができます。
DBにレコードを挿入するのはあなたのアプリケーションですか?またはあなたのアプリケーションはDBからレコードを取り出して電子メールを送信するだけですか? –
このアプリケーションは、残りのサービスを使用するユーザーのリストを取得し、各ユーザーのために電子メールを送信するために他の休憩サービスを呼び出します – prred