0

他のコードベースからジョブをトリガーしようとしています

MyCommand クラス:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Foundation\Bus\DispatchesJobs;
use App\Jobs\MyJob;


class EncodeTvVideos extends Command
{
    use DispatchesJobs;

    protected $signature = 'command:my';

    protected $description = '';

    public function handle()
    {
        $job = (new MyJob($this->argument()))
            ->onConnection('beanstalkd')
            ->onQueue('cron-default'));

        $this->dispatch($job);
    }
}

そして MyJob クラス:

<?php namespace App\Jobs;

use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class MyJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    private $payload;

    public function __construct($payload = null)
    {
        $this->payload = $payload;
    }

    public function handle()
    {
        echo "Job processed here";
        $this->job->delete();
    }
}

次のような queue:listen コマンドを使用してキューをリッスンしています

php artisan queue:listen --queue=cron-default

コマンドを実行すると (一部のコードベース内で) command:my このようなペイロードが正常に処理されます。

{
    "job":"Illuminate\\\\Queue\\\\CallQueuedHandler@call",
    "data":{
        "command":"O:29:\\"Acme\\Jobs\\FooJob\\":4:{s:11:\\"fooBar\\";s:7:\\"abc-123\\";s:5:\\"queue\\";N;s:5:\\"delay\\";N;s:6:\\"\\u0000*\\u0000job\\";N;}"
    }
}

今私の問題は、このジョブまたはコマンドを他のコードベースからトリガーする必要があることです。何か方法はありますか?

(commands/workers プロジェクト) のドメイン名がないか、コマンドをトリガーするルートを 1 つ作成してみてください。

4

1 に答える 1

1

この参考文献の助けを借りて

これらのパッケージを使用することにより、「illuminate/queue」: 「5.2. 」、「pda/pheanstalk」: 「~3.0」、「illuminate/encryption」: 「5.2.

このように、指定されたチューブにプレーンペイロードをプッシュできます

use Illuminate\Queue\Capsule\Manager as Queue;

$queue = new Queue;


// Some drivers need it
$queue->getContainer()->bind('encrypter', function() {
    return new Illuminate\Encryption\Encrypter('foobar');
});

$queue->addConnection([
    'driver' => 'beanstalkd',
    'host' => 'localhost',
    'queue' => 'default',
], 'default');

$queue->push('App\Jobs\MyJob@process', ['data'=> 'something']);

//最初のパラメータは他のコードベースの JobClass の完全なパス //2 番目のパラメータは Job への任意のパラメータ。

コマンドとプレーン ペイロードの両方を処理するための、ジョブのマイナーな変更

<?php namespace App\Jobs;

use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class MyJob extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    private $payload;

    public function __construct($payload = null)
    {
        $this->payload = $payload;
    }


    public function handle()
    {
        echo "Job processed here";
        $this->job->delete();
    }

   public function process($job, $payload)
    {
        echo "Job processed from plain payload";
        $job->delete();
    }
}
于 2016-09-20T10:18:48.897 に答える