2011-09-26 11 views
2

私は、自分が購読しているすべてのイベントについて、自分のユーザーに電子メール通知を送信する必要があります。私のサービスは大規模ではありませんが、それが一つになるのを止めるものではありません。複数のメールを効率的に送信する

現在、Springのメール送信者をかなり同期的に扱っています(購読しているメールアドレスをコレクションから集めてメールを送信しています)。しかし、この方法がすぐに使えなくなることがあります。したがって、私はもう少し並列化を目指しています。

同時に多数のスレッドが存在しない限り、複数のスレッドが状況を助けることがあります。私は、メモリ内のキューのようなものが必要になると思います。一定の間隔でメールを一括して送信し、新しいスレッドを開くことができます。終了したスレッドは、スレッドプールに収集され再利用されます。

提案?おそらく私のアプローチは複雑すぎます。おそらく、Springはすでにブロッキングと同期を緩和する手段を提供しています。私は知ってうれしいだろう。

+0

あなたはSO.programmersでより良い答えを得るかもしれません – Coffee

+0

あなたのボトルネックはほとんどCPUになることはありません。言い換えれば、コード効率について心配する必要はありません。 – tripleee

答えて

2

各ユーザーにメールを1つ送信するのではなく、一度にすべてのユーザーに1つのメールを送信してください。つまり、メールを1つ作成し、すべてのユーザーを宛先リストに追加します。それであなたのSMTPサーバは、それを複製して各人にコピーを送ることを心配します。

+1

しかし、それらをすべて普通の 'To:'受信者として設定しないでください。そうしないと誰もが全員の電子メールアドレスを見ることになりません。このようにする場合は、受信者を「Bcc」に設定します。 –

+0

ええと...聞こえるほど単純ですが、うまくいくかもしれません。唯一の制限は、私は電子メールをカスタマイズすることができない、例えば、ユーザーのユーザー名などを入れてしまうことです...しかし、これはあまり重要ではありません。 – user802232