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