gpt4 book ai didi

python - 使用 Mandrill send_at 或 Celery countdown/eta 延迟发送电子邮件

转载 作者:行者123 更新时间:2023-11-28 19:17:50 26 4
gpt4 key购买 nike

我通常会发送交易电子邮件来响应我网站上的某些操作,其中一些我会延迟几个小时发送。实际对电子邮件进行排队的函数是一个使用 .delay() 调用的 Celery 任务函数,它最终使用 djrill 对 Mandrill 进行 API 调用。 .

我发现 Mandrill 提供了一个 send_at发送电子邮件时的参数,这将使 Mandrill 延迟发送电子邮件,直到指定时间。 Celery 在调用 apply_async() or delay() 时还提供 etacountdown 参数在一个任务上,这将让 Celery worker 在执行任务之前等待 X 时间——这在此处相当于同一件事。

忽略成本,哪种方法在架构上更可取——让 Celery 使用 countdown 延迟电子邮件排队,或者立即将电子邮件发送到 Mandrill 但使用 send_at 参数以便 Mandrill 等待为我?做出此决定时我应该考虑哪些因素?

最佳答案

我将分享一些我们可以在此处做出选择时考虑的要点:

  1. 容错:如果我们把这个责任交给 Celery,那么我们可能更容易失败,因为如果消息队列(Rabbitmq、ZeroMQ 或其他)、机器或Celery 本身失败,那么电子邮件将永远不会发送。 Mandrill 也可能会失败,但可能是次要的。

  2. 维护:如果您需要将 Celery 换成其他东西怎么办?在这种情况下,您需要迁移代码,并且可能需要花一些时间来弄清楚如何在新的 MQ 工具中执行此调度。

  3. OOP:从OPP的角度,我们可以把Mandrill看作是一个发送邮件的实体,它带来了几个特性,例如调度,所以让我们从我们的系统中使用这个外部服务,让它完成它的工作!

  4. 可用性和可扩展性:考虑一种假设情况,由于性能要求不断提高,您需要同时在多个服务器上运行您的系统;哪种方法更容易、更有效地处理此调度?

这些并不是做出决定时应该考虑的所有方面,但肯定是一些不容错过的方面。希望这有助于找到更好/可靠的解决方案。

关于python - 使用 Mandrill send_at 或 Celery countdown/eta 延迟发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259598/

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