2017-05-19 11 views
0

私は100個のメール/分/ユーザーを送信する必要があり、それは特定の時間です(つまり、すべてのメール、つまり100 * 1000 = 10000メール/分が同時に送信されるはずです)定期的にバルクメールを送信する

現在、約1000人のユーザーがいます。

各メールの場合と同様に、まずメールを保存してから送信します。

パフォーマンスを向上させ、目標を最適に達成するために必要なものは何ですか。

[注:すべての電子メールは別のアカウントを介して送信されるので、文句を言わないの増加を制限する]任意の提案は非常に参考になります

私は現在、プロジェクト用にSpringブートを使用しています。

+1

このプロセスを配布する必要があります。 1つのIPから1分間に10k個のメールを送信するだけで、ブロックされます。 – Michael

+0

10000メールを同時に送るのは難しいでしょう。それはハードまたはソフトデッドラインを持っていますか?私は以前、Springのスレッドに関する同様の質問に答えました。たぶんこれはあなたを助けることができます:http://stackoverflow.com/questions/43141731/spring-threads-in-web-app/43141843#43141843 – kkflf

+0

@マイケルどのように私はプロセスを配布するか、あなたがこれまで行っている場合。 –

答えて

0

Windowsサーバー上でプロジェクトを実行する場合は、Windowsサービスを使用できます。

+0

Linuxでのプロジェクト –

+0

[OK]を、私はLinuxを知っていないが、この操作のための外部アプリが必要です。あなたは有料の電子メールサービスmailchimpなどを送信しようとすることができます –

1
//Remember to set @EnableScheduling 
//in the class containing your main method 
@SpringBootApplication 
@EnableScheduling 
@EnableAsync 
public class Application { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class); 
    } 
} 

@Component 
public class ScheduledTasks { 

    List<Email> listOfEmails; 

    int nextBatch = 50; 
    int curBatch = 0; 

    //This method will run every 15 second. 
    @Scheduled(fixedDelay = 15000) 
    public void yourMethodName() { 
     //This will process all of your objects all at once using treads 
     for(int i = curBatch; i < maxBatchSize(); i++){ 
      listOfEmails.get(i).process(); 
     } 
     nextBatch+=50; 
     curBatch+=50; 
    } 

    private int maxBatchSize(){ 
     if(nextBatch < listOfEmails.size()){ 
      return nextBatch; 
     } else { 
      return listOfEmails.size(); 
     } 
    } 
} 



public class YourObject { 

    Integer someTest = 0; 

    @Async 
    public void process(Email e) { 
     e.send(); 
    } 
} 
+0

上記のコードニッペプだけです。しかし、これにより、バッチでメールを送信することができます。 – kkflf

関連する問題