【问题标题】:Symfony - Swiftmailer spool send an email several timesSymfony - Swiftmailer spool 多次发送电子邮件
【发布时间】:2018-04-03 20:03:38
【问题描述】:

我有一个 CRON 作业,它创建要在数据库中发送的电子邮件。 它会创建大约 3000 封要发送的独特电子邮件。

然后我有一个这样配置的 CRON 作业:

* * * * * php bin/console swiftmailer:spool:send --message-limit=200 --env=prod --no-debug

所以第二个 CRON 作业尝试每分钟发送 200 封电子邮件。 当我看的时候:

ps aux | grep php

它显示多个同步进程 swiftmailer:spool:send。

这些同时调用会导致多次发送同一封电子邮件。 所以今天,即使我的数据库中只有一个条目,一个用户也会收到多封相同的电子邮件。

有人遇到过这个问题吗?

谢谢!

【问题讨论】:

  • 如果第一个 cron 调用没有在一分钟内完成会发生什么?
  • 发送消息后,您在数据库中设置一个标志,以便其他 cron 进程不再发送相同的消息?
  • @madalinivascu :您的第一条评论记得我选项--time-limit。也许 --time-limit=55 可以解决我的问题。
  • @madalinivascu:我不管理数据库中的标志,swiftmailer:spool:send 自己管理他。它将其 mail.status 更改为 1 (pending_send) 到 3 (sent)。
  • 您需要增加通话之间的时间,以便发送所有邮件并更新标志,如果工作时间超过 1 分钟,则未为某些电子邮件设置标志,因此您的服务器再次发送他们相信电子邮件没有发送

标签: php symfony cron swiftmailer spool


【解决方案1】:

如果您需要使用多个swiftmailer:spool:send 进程来加快发送电子邮件的速度,那么我认为您根本不应该使用spool。 但是您可以宁愿使用像 RabbitMQ 这样的单独消息队列系统,它处理不使用两次相同消息的情况。在这里阅读更多:

https://symfony.com/doc/current/messenger.html

https://symfony.com/doc/current/the-fast-track/en/18-async.html#going-async-for-real

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多