0

かなりの数の電話番号をダイヤルして録音を再生するようにプッシュ キューを設定しました。Twilio を利用したブラスト アナウンス システムです。各番号を反復処理して電話をかけるには時間がかかるため、プッシュ キューを使用してアプリのナビゲーションを高速化したいと考えています。

過去に Laravel 4 で Iron.io プッシュ キューを使用しようとしましたが、実行に時間がかかるタスクや、HTTP 要求が最初は遅かった場合、fire()メソッド内のコードが複数回実行されるようです。$job->delete()

これが私のキューハンドラの例です -

    class callLotsOfPeople {
    public function fire($job, $data) {
        // Do stuff with data, like calling lots of people.. takes time
        $job->delete();
        // For some reason this method can be called multiple times after a single queue push, 
        // resulting in multiple phone calls and angry clients
    }
}
4

2 に答える 2

2

これは遅すぎるかもしれませんが、私は同じ問題を抱えていました。修正を見つけ、Laravel 4.1 に含めるようにプル リクエストを送信しました。

基本的に、コードの変更により、このような $options 配列を渡すことができます

Queue::push('MyJob', $message, $queue, array('timeout' => 300));

機能は既に IronMQ.class.php にありますが、Laravel から簡単に渡す方法が見つかりませんでした。これが含まれていることを願っています。これにより、複数のジョブ送信の問題が解消されます。:-)

https://github.com/laravel/framework/pull/3555

編集: Queue::pull を Queue::push に変更、小さなタイプミス。

于 2014-02-13T18:21:27.830 に答える
1

私はまだプッシュ キューを十分に活用していませんが、IronMQ のドキュメントをざっと見てみると、次のことがわかりました。

長時間実行されるプロセス - 別名 202's

メッセージの処理に 60 秒以上のタイムアウトが必要な場合は、HTTP ステータス コード 202 で応答する必要があります。処理をお願いします。「タイムアウト」が経過する前にメッセージを明示的に削除しないと、メッセージは再試行されます。メッセージを削除するには、「Iron-Subscriber-Message-Url」ヘッダーを確認し、その URL に DELETE リクエストを送信します。

経由: http://dev.iron.io/mq/reference/push_queues/#long_running_processes__aka_202s

現在、ペイロードは簡単にアクセスできないバックグラウンドで作成されるため、タイムアウトは現時点で Laravel がサポートしているようには見えません。4.1 ブランチでプル リクエストを作成して、特に Iron プッシュ キュー用にこの機能を実装できます (ヒント: QueueInterface とすべてのキュー ドライバーの push() 関数の両方を編集する必要があります)。

回避策として、エラーが発生した場合は、最初から (時間のかかるタスクの$job->delete()ではなく)もう一度 (またはその一部) を行うことができますか? 何かのようなもの:Queue::push()

    class callLotsOfPeople {
        public function fire($job, $data) {
            $job->delete();
            
            // Do stuff with data, like calling lots of people.. takes time
    
            if ($error) {
                    Queue::push(...);
            }
        }
    }

どうなるか教えてください。将来同じような状況になるかもしれません。解決方法を教えてください。

于 2014-01-07T00:47:19.240 に答える