作业已添加到队列中,但不是由 Laravel 运行

问题描述 投票:0回答:1

我需要通过队列运行作业。所以这就是我所说的调度:

try {
            importProductsFromPlatform::dispatch($api, $options);
            // dispatch(new importProductsFromPlatform($api, $options));
        } catch (\Throwable $th) {
            $txt = "\n".'dispatching error: '.print_r($th->getMessage(), true);
            file_put_contents(storage_path('logs/import_products.log'), $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
        }

这是“工作”课程:

    namespace App\Jobs;

use App\Models\ApiClient;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class importProductsFromPlatform implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected ApiClient $api;
    protected $options = null;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(ApiClient $api, $options = null)
    {
        $this->api = $api;
        $this->options = $options;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $txt = "\n".'handling import, options: '.print_r($this->options, true);
        file_put_contents(storage_path('logs/import_products.log'), $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
        $this->api->helper()->parse_remote_products($this->options);
    }
}

永远不会调用此句柄方法,因为未创建日志条目(代码中其他位置的日志条目工作正常)。但是,如果在调度后我执行命令

php artisan queue:work --once
,工作就完成了。

那么我做错了什么?没有终端命令如何完成工作?

php laravel queue dispatch
1个回答
0
投票

多亏了阿伦,我的工作得以完成。为此,我只运行此命令一次

php artisan queue:listen
,现在添加到队列中的每个作业都会立即执行。 顺便说一句,我的 QUEUE_CONNECTION 是同步的,但它没有命令就无法运行。

© www.soinside.com 2019 - 2024. All rights reserved.