Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定期发送大量邮件_Java_Spring Boot_Architecture_Restful Architecture - Fatal编程技术网

Java 定期发送大量邮件

Java 定期发送大量邮件,java,spring-boot,architecture,restful-architecture,Java,Spring Boot,Architecture,Restful Architecture,我有一个要求,即我必须发送100封邮件/分钟/用户,并且是时间特定的。(即所有邮件,即100*1000=10000封邮件/分钟,应同时发送) 目前有近1000名用户 对于每封电子邮件,我都会先保存,然后再发送 我需要实施哪些措施来提高绩效并以最佳方式实现目标 [注意:所有电子邮件都通过不同的帐户发送,因此限制不会增加] 任何建议都会很有帮助 我目前正在项目中使用SpringBoot 如果项目在Windows server上运行,您可以使用Windows服务进行此操作。//请记住设置@Enable

我有一个要求,即我必须发送100封邮件/分钟/用户,并且是时间特定的。(即所有邮件,即100*1000=10000封邮件/分钟,应同时发送)

目前有近1000名用户

对于每封电子邮件,我都会先保存,然后再发送

我需要实施哪些措施来提高绩效并以最佳方式实现目标

[注意:所有电子邮件都通过不同的帐户发送,因此限制不会增加]

任何建议都会很有帮助


我目前正在项目中使用SpringBoot

如果项目在Windows server上运行,您可以使用Windows服务进行此操作。

//请记住设置@EnableScheduling
//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();
    }
}
//在包含main方法的类中 @SpringBoot应用程序 @使能调度 @使能同步 公共类应用程序{ 公共静态void main(字符串[]args)引发异常{ SpringApplication.run(Application.class); } } @组成部分 公共类ScheduledTasks{ 邮件列表; int nextBatch=50; int-curBatch=0; //此方法将每15秒运行一次。 @计划(固定延迟=15000) public void yourMethodName(){ //这将使用踏板一次性处理所有对象 对于(int i=curBatch;i
您需要分发流程。每分钟从一个IP发送10万封电子邮件只会让你被阻止。同时发送1万封邮件是很难实现的。它的最后期限是硬的还是软的?我之前已经回答了一个类似的关于Spring中线程的问题。也许这可以帮助您:@Michael,如果您到目前为止已经完成了分发流程的工作,您知道我该如何分发流程吗?@kkflf这不是一个艰难的最后期限。@Utsavana最简单的方法是使用具有丰富API的服务。不过这会花你一点钱。在LinuxOk上进行项目,我不知道linux,但是你需要一个外部应用程序来完成这个操作。您可以尝试付费电子邮件发送服务mailchimp或其他。以上只是一个代码片段。但这将使您能够成批发送电子邮件。这是一个不好的建议,因为spring boot
@Async
不能保证在调用中保留参数。这可能会导致某些邮件无法发送。你可以找到详细的信息。True@Fatih,人们只是给出答案,而不首先尝试,也不知道代码的后果!这只是一个代码片段,不是最终的解决方案。您必须始终注意线程安全-这是所有软件系统的常见问题。我的回答假设电子邮件对象是不可变的。要使此代码段成为一个可供生产使用的解决方案,必须更改以下几点。这与
@Async
不“保留”参数无关,这是一个常见的线程安全问题。Spring不是魔法-您需要注意线程安全。