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