gpt4 book ai didi

java - Thread VS RabbitMQ Worker资源消耗

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:00 25 4
gpt4 key购买 nike

我正在使用 JAVA ExecutorService 线程发送亚马逊电子邮件,这有助于我通过 API 与 AmazonSES 进行并发连接并以闪电般的速度发送邮件。所以亚马逊在一秒钟内接受一定数量的连接,所以对我来说一秒钟有 50 个请求。因此,我每秒执行 50 个线程,每天发送大约 100 万封电子邮件。

这工作得很好,但现在邮件的数量将会增加。而且我不想在 RAM 和处理器上投入更多。

我的一位 friend 建议我使用 RabbitMQ Workers 而不是线程,因此我将使用 50 个工作线程来完成这项工作,而不是 50 个线程。

所以在更改一些代码来测试资源管理之前,我只想知道消耗会不会有很大的差异?所以目前当我执行线程时,JAVA 消耗 20-30% 的内存。那么如果我使用 worker ,它会低还是高?

或者他们有其他选择吗?这是我的线程电子邮件发送功能:

@Override
public void run() {
Destination destination = new Destination().withToAddresses(new String[] { this.TO });
Content subject = new Content().withData(SUBJECT);
Content textBody = new Content().withData(BODY);
Body body = new Body().withHtml(textBody);
Message message = new Message().withSubject(subject).withBody(body);
SendEmailRequest request = new SendEmailRequest().withSource(FROM).withDestination(destination).withMessage(message);
Connection connection = new Connection();
java.util.Date dt = new java.util.Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String insert = "";
try {
System.out.println("Attempting to send an email to " + this.TO);

ctr++;
client.sendEmail(request);
insert = "INSERT INTO email_histories (campaign_id,contact_id,group_id,is_opened,mail_sent_at,mail_opened_at,ip_address,created_at,updated_at,is_sent) VALUES (" + this.campaign_id + ", " + this.contact_id + ", " + this.group_id + ", false, '" + sdf.format(dt) + "', null, null, '" + sdf.format(dt) + "', '" + sdf.format(dt) + "', true);";
connection.insert(insert);
System.out.println("Email sent! to " + this.TO);
} catch (Exception ex) {
System.out.println("The email was not sent.");
System.out.println("Error message: " + ex.getMessage());
}

}

最佳答案

我没有使用 RabbitMQ 的经验,所以我不得不把这个问题留给其他人来回答。

Or is their any alternative option to this?

不要为每封邮件使用一个线程,而是将该代码移至可运行程序中。添加一个共享信号量,其中许可数量=您每秒要发送的邮件数量。每封邮件获取一个许可证,每秒从另一个线程重新填充许可证(即单独的 SchedledExecutorServiceTimer)。然后将执行器线程池大小调整为您的服务器可以处理的大小。

关于java - Thread VS RabbitMQ Worker资源消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com