我需要通过队列运行作业。所以这就是我所说的调度:
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 artisan queue:listen
,现在添加到队列中的每个作业都会立即执行。
顺便说一句,我的 QUEUE_CONNECTION 是同步的,但它没有命令就无法运行。