おはようございます!Laravel 5.2:Laravel Queuesサービスを使用したデータベースの挿入の処理
私は自分のコントローラに次のコードを持っている:
$num_rows = $this->drupalRequestRowCount();
$uris = $this->drupalRequestPrepareUri($num_rows, config('constants.IMPORT_DATA_URI'));
$requestHandler = new RequestHandler($uris[0]);
$content = $requestHandler->httpRequest();
// Dispatch each URI for the job that will handle
// the insertion of our Drupal data.
foreach($uris as $uri) {
$job = (new DataJob($uri))->onQueue('data_export_insert');
$this->dispatch($job);
}
return 'Jobs dispatched';
私は毎晩私のLaravelデータベースと同期するデータとDrupalのデータベースを持っています。私はDrupalで開発したAPIを使用して、Laravelデータベースに必要な多くのデータを返します。
APIは、最大10個のアイテム(多くのデータを含む)を返します。 Drupalデータベースには、毎晩インポートする必要がある+ - 17000個のアイテムがあります。 Queue APIは、一度にすべてをインポートするのではなく、バッチでデータをインポートするための良い解決策であると考えました。私はループの$uris
をループして、$num_rows
に基づいてAPIにオフセットを追加します。
ので$num_rows
戻っ17000の項目場合、$uris
配列はそうのような1700件のアイテムが含まれます:
[0] => 'http://mywebsite.com/api/request_data.json?offset=0'
[1] => 'http://mywebsite.com/api/request_data.json?offset=10'
[2] => 'http://mywebsite.com/api/request_data.json?offset=20'
などこれは私が1700を持ちたいということを意味
私がphp artisan queue:listen database
コマンドを実行すると、Laravelが私のために実行するジョブが送信されます。
次のコードは、1700回実行したいジョブです。
public function __construct($uri)
{
$this->uri = $uri;
}
public function handle()
{
try {
Log::info('Inserting data into database for uri: ' . $this->uri);
$requestHandler = new RequestHandler($this->uri);
$content = $requestHandler->httpRequest();
foreach($content as $key => $value) {
$id = $value->id;
$name = $value->name;
DB::insert('INSERT INTO table_1 (id, name) VALUES (?, ?)', [$id, $name]);
}
} catch(\Exception $e) {
Log::error('Error in job: '. $e->getMessage());
}
}
私の問題は、ジョブがまったく実行されないということです。データベース内のジョブテーブルをチェックすると、テーブル内のジョブ行で1700行が表示されるため、ジョブはデータベースに正しくディスパッチされています。私はハンドル機能を記録しようとしましたが、php artisan queue:listen
またはphp artisan queue:work
を実行しても何も起こりません。 failed_jobsテーブルにもレコードはありません。
ハンドル機能が実行されていないため、内部で何かが記録されることはありません。私は例を使ってインターネット上の情報を見つけようとしましたが、私が見つけることができるのは私が必要としないいくつかのメールの例です。
ご協力いただければ幸いです!