Ruby on Rails アプリケーションを実行しています。現在、delayed_job を使用してメールを送信しています。しかし、RabbitMQ メッセージング キューに切り替えたいと考えています。使い始めるのに役立つリソースが見つかりません。私は多くのRabbitMQドキュメントを読みましたが、そうではありません。このタスクを達成するために、私に頭を上げてください。
3 に答える
Rails の RabbitMQ 統合は、eventmachine とコールバック ベースのコードに大きく依存しています。これにより、コードが非常に複雑になり、すべてのコードでイベント ループを認識できるようにする必要があります。
たとえば、シン (実行中のイベント ループが既にある) またはユニコーン (リアクターをインスタンス化し、そのライフサイクルを管理する必要がある) の背後にデプロイする場合、同じコードを使用することはできません。
Rails.queue
反対に、これを実際のジョブ キューに抽象化できます (Resque はすでに DJ よりもはるかに高速であり、Sidekiq はズボンを脱ぎ捨て、Beanstalkd/Stalker は非常に優れた候補です)。レール 4。
Rails 4 では、すべての ActionMailer をデフォルトで非同期に設定するオプションもあります (それにより、設定された任意のジョブ キューに委譲します)。http://reefpoints.dockyard.com/ruby/2012/06/26/rails-4-sneak-peek-async-actionmailer.html
一石二鳥で、メールの送信がアクティブなレコード ライフサイクル イベントに基づいている場合 (ほとんどの場合そうです)、私の 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
== 非同期配信 + コントローラーをスリムに保ちます。
遅延ジョブを置き換える優れた Ruby バックグラウンド ジョブ処理ライブラリを探している場合は、Sidekiqを試してみてください。それについての最近のRailscastさえここにあります。
Knight.ioでBackground Jobs Gemsの概要を確認できます(私はこのサイトを始めました)。