如何使用命令行手动运行laravel/lumen作业

Osc*_*vid 5 php shell laravel laravel-5 lumen

我在文件夹中创建了一个Job文件,app/Jobs/MyJob.php我想只运行一次,如果它可以使用命令行.

就像是:

> php MyJob:run

我应该使用什么命令来运行此文件或句柄中的方法?

mix*_*xel 23

$ composer require mxl/laravel-job
$ php artisan job:dispatch YourJob # for jobs in app/Jobs directory (App\Jobs namespace)
$ php artisan job:dispatch '\Path\To\YourJob' # dispatch job by its full class name
$ php artisan job:dispatchNow YourJob # dispatch immediately
$ php artisan job:dispatch YourJob John 1990-01-01 # dispatch with parameters
Run Code Online (Sandbox Code Playgroud)

创建运行工作的特殊工匠命令.

打开创建的Job文件并定义如下FromParameters类:

php artisan make:command DispatchJob
Run Code Online (Sandbox Code Playgroud)

现在你应该启动队列工作者:

class DispatchJob extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'job:dispatch {job}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Dispatch job';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $class = '\\App\\Jobs\\' . $this->argument('job');
        dispatch(new $class());
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以从命令行运行作业:

php artisan queue:work
Run Code Online (Sandbox Code Playgroud)

  • @LeoGasparrini 我的包仅使用 `"laravel/framework": "^5.5"` 依赖项。这更可能是您的项目依赖项的问题。 (2认同)

Ami*_*esh 19

最简单的方法是使用 Tinker 进行调用

这是用于调试的 Laravel 命令,通过从项目根目录运行以下命令来使用它

php artisan tinker
Run Code Online (Sandbox Code Playgroud)

从 Tinker 调度特定队列上的作业

\Queue::pushON('rms', new App\Jobs\UpdateRMS());

第一个参数 - 队列名称

第二个参数——作业名称

一次将多个作业分派到特定队列

\Queue::bulk([new App\Jobs\UpdateRMS(), new App\Jobs\UpdateRMS()], null, 'rms');
Run Code Online (Sandbox Code Playgroud)

Demo(product-service是我的项目名)照着做就可以了 在此输入图像描述 在队列中找到已分派的作业)我的案例队列配置为Redis

在此输入图像描述

  • 使用 Tinker,还可以简单地运行助手 `dispatch_now(new MyJob(new MyArgs()))` (2认同)

J.C*_*ras 5

如果您使用QUEUE_DRIVER不同的同步方式并且想要调度之前创建的队列,请从项目文件夹中运行以下命令:

php artisan queue:work --queue=MyQueueName
Run Code Online (Sandbox Code Playgroud)

检查此链接以配置数据库 QUEUE_DRIVER