Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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
Python 使用Mandrill send_at或芹菜倒计时/eta延迟发送电子邮件_Python_Django_Celery_Delayed Job_Mandrill - Fatal编程技术网

Python 使用Mandrill send_at或芹菜倒计时/eta延迟发送电子邮件

Python 使用Mandrill send_at或芹菜倒计时/eta延迟发送电子邮件,python,django,celery,delayed-job,mandrill,Python,Django,Celery,Delayed Job,Mandrill,我通常会发送事务性电子邮件,以响应我网站上的某些操作,其中一些操作我会延迟发送几个小时。实际对电子邮件进行排队的函数是一个芹菜任务函数,它使用.delay()调用,最终使用对Mandrill进行API调用 我发现Mandrill在发送电子邮件时提供了一个参数,它会使Mandrill延迟发送电子邮件直到指定的时间。芹菜在调用任务时还提供了eta或countdown参数,芹菜工人在执行任务之前要等待X个时间,在这里,这相当于相同的事情 忽略成本,哪种方法在体系结构上更可取,让芹菜延迟使用倒计时将电子

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

我发现Mandrill在发送电子邮件时提供了一个参数,它会使Mandrill延迟发送电子邮件直到指定的时间。芹菜在调用任务时还提供了
eta
countdown
参数,芹菜工人在执行任务之前要等待X个时间,在这里,这相当于相同的事情


忽略成本,哪种方法在体系结构上更可取,让芹菜延迟使用
倒计时将电子邮件排队,或者立即将电子邮件发送给Mandrill,但使用
send_at
参数使Mandrill等待我?在做出这个决定时,我应该考虑哪些因素?

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

  • 容错性:如果我们将这一责任交给芹菜,那么我们可能更容易失败,因为如果消息队列(Rabbitmq、ZeroMQ或其他什么)、机器或芹菜本身出现故障,那么电子邮件将永远不会发送。曼德里尔也可能不及格,但很可能是在低年级

  • 维护:如果您需要换芹菜做其他东西,该怎么办?在这种情况下,您需要迁移代码,并且可能需要花费一些时间来了解如何在新的MQ工具中执行此调度

  • OOP:从OPP的角度来看,我们可能会将Mandrill视为发送电子邮件的实体,它带来了一些功能,例如调度,所以让我们从系统中使用这个外部服务,让它完成它的工作

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


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

    你本质上是在问,你是应该把预定的电子邮件放在自己的队列中还是放在Mandrill的队列中?这几乎更像是一个ops问题:您是否更愿意将邮件队列维护工作交给Mandrill,还是将其与您(大概)已经在使用的芹菜系统集成在一起。似乎切换成本不会很高,所以也许可以尝试两种方法,看看您更喜欢哪一种。另一件事:如果出于某种原因,您需要在计划消息时分配Mandrill消息id,那么您必须使用Mandrill的send_at。我都做过;你完全正确,转换成本很低。我一直在想,当我思考这个问题的时候,我错过了什么——这听起来可能并不多。