0

我正在运行一个Ruby on Rails 应用程序,目前使用delayed_job 发送电子邮件。但我想切换到 RabbitMQ 消息队列。我找不到任何有用的资源来开始使用它。我读了很多 RabbitMQ 文档,什么都没有。请让我注意完成这项任务。

4

3 回答 3

1

Rails 的 RabbitMQ 集成严重依赖于 eventmachine 和基于回调的代码。这将使您的代码变得非常复杂,并且您需要让所有代码都知道事件循环。

例如,如果您在 Thin(已经有一个正在运行的事件循环)或 unicorn(您必须在其中实例化反应器并管理其生命周期)之后部署,则不能使用相同的代码。

另一方面,您可以将其抽象为一个实际的作业队列(Resque 已经比 DJ 快得多,Sidekiq 脱裤子,而 Beanstalkd/Stalker 是一个非常好的竞争者),这可能Rails.queue与导轨 4.

在 Rails 4 中,您还可以选择将所有 ActionMailer 默认配置为异步(从而委托给任何已配置的作业队列)。http://reefpoints.dockyard.com/ruby/2012/06/26/rails-4-sneak-peek-async-actionmailer.html

于 2012-10-08T12:53:48.783 回答
1

如果您想用一块石头杀死 2 只鸟,并且您发送电子邮件的需求是基于活动记录生命周期事件(它们几乎总是如此),那么您应该查看我的 gem。

https://github.com/jasonayre/active_pubsub

它建立在 bunny gem 之上,工作起来很像活动记录观察者,除了你在一个单独的进程中运行订阅者。(这实际上只是一个附加功能,其主要目的是允许多个 Rails 应用程序订阅彼此的事件)- IE

#user model
class User < ::ActiveRecord::Base
  include ::ActivePubsub::Publishable

  publish_as "myapp"
end

#subscriber

class PostSubscriber < ::ActivePubsub::Subscriber
  observes "cms"
  as "aggregator"

  on :created do |user_hash|
    user = User.find(user_hash[:id])
    #or whatever
    WelcomeMailer.deliver(user)
  end
end

== 异步交付 + 让你的控制器更苗条。

于 2014-11-07T23:08:21.223 回答
0

如果你正在寻找一个很棒的 Ruby 后台作业处理库来代替 delay_job,你应该试试Sidekiq。甚至还有最近的 Railscast 在这里

您可以在 Knight.io上获得有关背景工作宝石的概述(我创建了这个网站)。

于 2012-10-08T11:17:44.237 回答