gpt4 book ai didi

ruby - 使用sidekiq、redis发送邮件

转载 作者:可可西里 更新时间:2023-11-01 11:16:55 25 4
gpt4 key购买 nike

我对 ruby​​ 中的 sidekiq 有疑问。我正在构建一个系统来发送事件电子邮件,10k - 50k 电子邮件/事件。现在我正在使用 Redis 和 Sidekiq,我为每封电子邮件创建一个工作人员,如下所示:

receivers.each do |receiver|
begin
email_sending_log = EmailSendingLog.create(email:
receiver["email"], sender: sender["email"], content:
content["value"], status: "REQUESTED")
EmailWorker.perform_async(adapter, receiver, sender, content, subject, email_sending_log.id.to_s)
rescue Exception => e
end
end

但是速度太慢了,你们有什么想法可以加快我的系统吗?或者一些加速 sidekiq、redis 的例子?

最佳答案

发送事件电子邮件是一项非常标准的任务 - 必须发送 N 封电子邮件(您的 N=10k..50k)。
初学者选择两种相反的方式:一个带有 N-loop 的后台作业或一个发送的 N 个后台作业。

两者都不好:

  • 长 N 循环容易出错并强制关闭(app deploy等)- 很多消息可能会发送两次,而且很多消息可能会丢失。
  • 由于作业处理开销(您的情况),N 个作业需要花费大量时间。

怎么办?

批处理。将 M 个作业与 K 循环一起使用,其中 M*K=N。示例:100 多个作业,每个作业有 100 个循环。尝试不同的 M、K,然后选择最适合您的。这不是 Elixir ,而是坏事对立的中庸之道。

电子邮件发送服务。如果您的事件是 marketing emails (我认为是),最好的方法是使用电子邮件发送服务,如 Sendgrid、SES、Mailchimp、Mailgun、Elasticemail 等。
它们允许您为每个事件创建电子邮件模板(带替换),然后仅通过一次 API 调用(地址和替换作为调用参数)发送整个事件。这是最快和最可靠的方式,而且电子邮件发送服务提供额外的好处。唯一的缺点是它是付费的。

关于ruby - 使用sidekiq、redis发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729130/

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