【发布时间】:2011-10-10 14:59:44
【问题描述】:
实际问题
我正在通过 mongoid 使用 Rails 3.0.4 和 MongoDB。
我正在使用@mailgun 发送我的电子邮件。我发送批量(如新闻信)和交易(如激活帐户,忘记密码)电子邮件。现在,我正在使用单个域(转换为 mailgun 端的单个队列)来传递这些邮件。当我有很多批量电子邮件已经排队并且有人注册或请求新密码时,就会出现问题。我希望在批量邮件之前发送事务性电子邮件,但 mailgun 队列以 FIFO 为基础工作。
我想出一种缓解这种情况的方法是使用不同的域(因此可以同时处理不同的队列)来处理批量和事务性邮件。在 rails smtp 设置是应用程序级别设置而不是请求级别设置。所以,我想,我会为不同的 smtp 设置使用不同的环境。
我还有一个邮件队列系统,我正在使用delayed_job 来处理它。我想不出一种方法来区分delayed_job 中的批量邮件和交易邮件。所以,我决定将我的队列系统移动到rescue+redis 或beanstalked+stalker,在那里我可以标记队列并且可以要求工作人员只处理特定的队列。
问题
我想要一些更容易维护、资源消耗最少并且可以很好地扩展的东西。
- 使用延迟作业,我无需运行任何其他服务器并对其进行监控。
- 对于delayed_job,我在机架空间上使用了256MB 切片,但redis 和stalker 需要另一台服务器,要么是resque 要么是beanstalkd。
- 我不知道如何扩展,但自从我的应用程序启动以来已经是第 2 个月了,我已经发送了 30k 多封电子邮件。
如果有任何替代从delayed_job 移植到redis 或stalker 的方法,请告诉我。
更新:
似乎delayed_job 现在也支持命名队列,但尚未记录。打开一张票以添加文档,一旦我知道如何使用它们,就会更新详细信息:)
【问题讨论】:
-
单独的@mailgun 实例?一种用于批量,一种用于交易?
-
您是在建议还是在询问?如果在 sendgrid 中询问类似的子用户,该计划以 80 美元的计划开始,但在 mailgun 上则以 19 美元的计划获得。
标签: ruby-on-rails background scalability maintainability