0

同じクラス内にあるカスタム ハンドラー メソッドを実行するために、タスクをキューにプッシュする次のようなコードを考えてみましょう。

<?php namespace Space;

class Spaceship {

    public static function cruise()
    {
        // Throtting in 3 seconds...
        Queue::later(3, '\Space\Spaceship@throttle', $coordinates, 'queue-name');
    }

    public static function throttle($job, $data)
    {
        $job->delete();
        return 'ok';
    }

}

$job->delete(); を追加する前に、これはうまくいきました。しかし、今ではエラーが発生しています:

exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function delete() on a non-object

Laravel 4.2 のドキュメントには、プッシュ キュー タスクがカスタム ハンドラ メソッドを指している場合、 $job->delete() を使用してキューからタスクを明示的に削除する必要がない理由が説明されていません。それでも、この種の実装は機能し、$job パラメーターがログに記録されると、それは false になります。

4

1 に答える 1

1

にアクセスしapp\config\queue.phpてキーを確認しdefaultます。後者が に設定されている場合sync、上記の動作が期待されます。

syncdriver はタスクをすぐに実行します。つまり、Queue::later実際にはQueue::push.

に変換してみてください。コードはエラーなしで実行Queue::laterされます。Queue::push

キュー内のタスクの明示的な削除に関しては、ほとんどの場合不要です。ただし、ジョブの自動削除を提供しないキュー サービスを考慮する必要があります。

私の場合、AWS SQS (Message Queue Service) は、ジョブがキュー チューブからプルされた後、ジョブを自動的に削除します。

于 2015-01-20T04:35:44.160 に答える