1

初めて L4 でキューを設定していますが、いくつかの問題が発生しました。次のような単純なコントローラーメソッドがあります。

public function getIndex()
{
    $data = array(
        'offset' => 3300000,
        'site'   => 1
    );
    Queue::push('Class@jobmethod', $data);
    return 'OK!';
}

ジョブメソッドの一番下で、私は次のようなことをします:

public function jobmethod()
{
    ....
    $data = array(
        'offset' => $data['offset'] + 100,
        'site'   => $data['site']
    );
    Queue::push('Class@jobmethod', $data);
    $job->delete();
}

そのため、ジョブはより高いオフセットでもう一度キューをループします。今私の問題は、ブラウザでコントローラーメソッドを呼び出すと、OK! が返されず、ページをロードし続けることです。DB テーブルにログインするようにジョブを設定しましたが、何度も実行され続けていることがわかります。

ここで何が起こっているのか誰にも分かりますか?

4

2 に答える 2

9

デフォルトのキューハンドラーが「同期」に設定されていると思います。これは app/config/queue.php で確認できます。

実際のキューがインストールされていないため、これはイベントを直接処理します。

したがって、あなたの場合、同じ関数を反復し続けるため、常にジョブメソッドを実行します。jobmethod で Queue push を削除すると、OK が返されます。

したがって、これを機能させるには、Beanstalkd のようなキュー システムをインストールする必要があります。これを行う場合"pda/pheanstalk": "dev-master"は、composer.json の require セクションに必ず追加してください。

キューを実行したい場合は、次の質問に対する私の回答を確認してください: How to fire Laravel Queues with beanstalkd

于 2013-07-03T09:51:15.893 に答える
3

無限再帰に入ると思います

public function getIndex()
{
    $data = array(
        'offset' => 3300000,
        'site'   => 1
    );
    Queue::push('Class@jobmethod', $data); //Here you push the job to the queue
    return 'OK!';
}


public function jobmethod()
{
    ....
    $data = array(
        'offset' => $data['offset'] + 100,
        'site'   => $data['site']
    );
    Queue::push('Class@jobmethod', $data); //This is creating infinite recursion!!!
    $job->delete();
}

このバリアントを検討してください:

public function getIndex()
    {
        $data = array(
            'offset' => 3300000,
            'site'   => 1
        );
        Queue::push('Class@jobmethod', $data); //Here you push the job to the queue
        return 'OK!';
    }


    public function jobmethod($data)
    {
        ....
        //Queue::push('Class@jobmethod', $data); //This is creating infinite recursion!!!
        $job->delete();
    }
于 2014-09-11T15:46:16.143 に答える