2

実際の問題

私は、mongoidを介してRails3.0.4とMongoDBを使用しています。

@mailgunを使用してメールを配信しています。バルク(ニュースレターなど)とトランザクション(アカウントのアクティブ化、パスワードを忘れたなど)の両方の電子メールを送信します。現在、私はこれらのメールを配信するために単一のドメイン(メールガン側の単一のキューに変換されます)を使用しています。大量のメールがすでにキューに入れられていて、誰かが新しいパスワードを登録または要求すると、問題が発生します。トランザクションメールをバルクメールの前に配信したいのですが、mailgunキューはFIFOベースで機能します。

これを軽減する方法は、バルクメールとトランザクションメールに異なるドメイン(したがって、同時に処理できる異なるキュー)を使用することです。Railsでは、SMTP設定は、リクエストレベルの設定ではなく、アプリケーションレベルの設定です。したがって、SMTP設定ごとに異なる環境を使用することにしました。

私はメール用のキューシステムも持っており、それを処理するためにdelayed_jobを使用しています。delayd_jobでバルクメールとトランザクションメールを区別する方法がわかりません。そこで、キューシステムをrescue+redisまたはbeanstalked+stalkerのいずれかに移動することにしました。この場合、キューにタグを付けて、特定のキューのみを処理するようにワーカーに要求できます。

質問

保守が簡単で、リソースをほとんど必要とせず、拡張性に優れたものが必要です。

  • delayd_jobを使用すると、他のサーバーを実行して監視する必要がありません。
  • delayd_jobの場合、ラックスペースで256MBのスライスを使用していましたが、redisとストーカーにはresqueまたはbeanstalkdのいずれかの別のサーバーが必要でした。
  • スケーリングについてはわかりませんが、アプリがリリースされてから2か月目になり、すでに3万通以上のメールを送信しています。

delayd_jobからredisまたはstalkerに移植する代わりの方法があれば、私に知らせてください。

アップデート:

delayd_jobも名前付きキューをサポートしているようですが、まだ文書化されていません。ドキュメントを追加するためにチケットを開くと、それらの使用方法がわかれば、詳細が更新されます:)

4

1 に答える 1

2

遅延ジョブは、オプションの優先度パラメーターを受け入れます(リンクされたページの終わり近くで説明されています)。

例えば:

Delayed::Job.enqueue(MailingJob.new(params[:id]), 3)

...3優先順位はどこにありますか。

したがって、大量メール送信をキューに入れるときは優先度を指定しないでください。トランザクションメールをキューに入れるときは、より高い値を指定してください。このように、トランザクションメールはまだ送信されていないものよりも先に@mailgunキューに入れられます。

送信SMTPサーバーに何らかの低速接続がない限り、1分あたり数百通の電子メールが送信される可能性があります。たとえば、@ mailgunとあなたにすでに200通の大量の電子メールが渡されていても、それほど心配する必要はありません。 'トランザクションメールを待っています。その後まもなく送信されます。

于 2011-07-21T22:05:44.130 に答える