3

SMTP2 で動作するように SES をセットアップしています。SES アカウントの制限の 1 つ (デフォルトでは少なくとも) は、毎秒 5 メールの制限です。

この記事で説明されているように、スプーラーをセットアップしたいと考えています。cron を使用して毎分トリガーできますが、これは私の目的には問題ありません。しかし、私の心配は、大量の電子メールがこのスプーラーでキューに入れられ、サーバーがそれらを一度に送信しようとすることです。

この記事には、実行ごとに送信される電子メールの総数を制限する方法と、実行時間を制限する方法がリストされています。ただし、どちらも私のユースケースには適合しません。1 秒あたりに送信されるメールを制限することです。

スプーラから送信される電子メールのレートを制限する方法はありますか?

4

2 に答える 2

4

より良い解決策

Throttler プラグインの使用は、/かなり/簡単です。

YML を使用するのは、それが私にとってより正気だからです。

カスタム サービスのセットを定義する必要があります。これを行う/少し/より良い方法があるかもしれませんが、うまくいくはずです。

まず、スロットラー サービスを定義します。

services:
  my.throttler:
    class: Swift_Plugins_ThrottlerPlugin
    arguments: [300, 2]

メーラーの独自のインスタンスを定義します。

services:
  my.mailer:
    class: Swift_Mailer
    arguments: [@swiftmailer.transport]
    calls:
      - [ registerPlugin, [ @my.throttler ] ]

これで、サービス my.mailer を使用して、スロットルされた電子メールを 5/秒で送信するように設定する必要があります。

元の回答

より高度な解決策で機能するようにするには、デフォルトのキュー ハンドラーを拡張する必要があります。

Swift_Transport_SpoolTransport は、探し始めたい場所です。

もう 1 つのオプションは、引数 --time-limit=1 --message-limit=5 でデフォルトのスプールを実行するデーモン サービスを介して実行するコマンドを構築することです。それは失敗するたびに再実行されます。

SpoolTransport を拡張することは明らかに健全なオプションですが、2 番目の解決策は一般的に追跡するのにより集中的になります。

于 2012-07-20T04:04:25.740 に答える