2016-08-18 10 views
1

おはようございます!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テーブルにもレコードはありません。

ハンドル機能が実行されていないため、内部で何かが記録されることはありません。私は例を使ってインターネット上の情報を見つけようとしましたが、私が見つけることができるのは私が必要としないいくつかのメールの例です。

ご協力いただければ幸いです!

答えて

1

問題を修正しました。あなたの仕事コードprotected $payloadに配置してください!ペイロードは、キューハンドラに渡すデータです。

関連する問題