6

より速くて軽いhttp応答のために非同期で電子メールを送信したいのですが、多くの新しい概念に苦労しています。

たとえば、ドキュメントではスプールについて説明しています。ファイルでスプールを使用してから、コマンドでメールを送信する必要があると表示されます。しかし、そのコマンドをどのように実行する必要がありますか?そのコマンドを1分ごとに実行するようにcronjobを設定した場合(で利用可能な最小値cron)、ユーザーは電子メール(登録電子メールなど)が送信されるまで平均30秒待つ必要があります。

そこで、代わりにキューを使用することを考えました。私はすでに画像処理(サムネイル作成など)にRabbitMQBundleを使用しています。しかし、私はこれを定期的にしか使用しないので、cronジョブ内から消費されます。

たぶん、新しいメッセージが電子メールキューに到着するのを常に待機し、それらをできるだけ早く配信するデーモンを作成する必要がありますか?

4

3 に答える 3

2

解決策は、すべての電子メールをキューに送信してから、そのキューをサービスで使用することです。私のサービスは非常にシンプルで、キューからアイテムを取り出します。各アイテムはfrom、to、bodyなどの配列であり、そのメールを送信します。Rabbitを使いやすくするThumperを使用しています:github.com/videlalvaro/Thumper。そして、サービスが常に「sv」(Runitから)を使用して稼働していることを確認します:smarden.org/runit/sv.8.html。他の任意のサービスまたはデーモンマネージャーを使用できます。

于 2015-01-05T13:42:48.223 に答える
1

私はあなたが持っていたのと同じ問題を抱えています。最終的にどのようにして問題を解決しましたか?

今のところ、ループで実行するためにcrontabで小さなスクリプトを実行します。

<?php
include('/var/www/vendor/symfony/symfony/src/Symfony/Component/Filesystem/LockHandler.php');
use Symfony\Component\Filesystem\LockHandler;

$lock = new LockHandler('mailer:loop');
if ($lock->lock()) {
    system('cd /var/www && php app/console swiftmailer:spool:send');
    sleep(1);
    $lock->release();
    shell_exec('cd /var/www && php LoopMailer.php > /dev/null 2>/dev/null &');
}

それはあまりきれいではありませんが、それは彼の仕事をします。

于 2014-11-13T10:15:36.107 に答える
0

メッセージのスプーリング用とインスタントメールの送信用の2つのサービスが必要です。これを確認してください

于 2012-11-26T19:36:30.963 に答える