Laravel5.1でqueue処理が実行されない。
(Laravel初心者です。)LaravelのQueue(非同期処理)について質問させてください。
現在Lavel5.1.4を使っており、プッシュメッセージ送信を非同期処理にさせようとしています。
現在プログラムは動いており、.envでのQUEUE_DRIVER=sync状態で動作することは確認しております。
.envをQUEUE_DRIVER=databaseにした際、データベースのテーブルjobsにQUEUEが格納されることまでは確認しています。
ですが、 php artisan queue:work を実行してもQUEUE処理を開始しません。
(上記実行するとコマンドラインに戻ります。⇒これは正常?)
発生している問題・エラーメッセージ
下記に記しましたが、
過去のQUEUEを削除するため
php artisan queue:flush
を実行した際にConnection Time outエラーが出ています。
該当のソースコード
プッシュ通信非同期化に先立ち、処理確認用にapp\Jobsに作ったサンプルファイル。
PHP
1<?php 2 3namespace App\Jobs; 4 5use App\Jobs\Job; 6use Illuminate\Queue\SerializesModels; 7use Illuminate\Queue\InteractsWithQueue; 8use Illuminate\Contracts\Bus\SelfHandling; 9use Illuminate\Contracts\Queue\ShouldQueue; 10use Log; 11 12 13class SampleJob extends Job implements SelfHandling, ShouldQueue 14{ 15 use InteractsWithQueue, SerializesModels; 16 17 /** 18 * Create a new job instance. 19 * 20 * @return void 21 */ 22 public function __construct() 23 { 24 // 25 } 26 27 /** 28 * Execute the job. 29 * 30 * @return void 31 */ 32 public function handle() 33 { 34 $queued_at = date('Y-m-d H:i:s'); 35 sleep(5); 36 $dispatched_at = date('Y-m-d H:i:s'); 37 Log::info("処理開始 - {$queued_at} ... 処理終了 - {$dispatched_at}"); 38 } 39}
.envの内容。syncをdatabaseに書き換え。(syncの時は、正しく動作。databaseに書き換えると、正しくDBのjobsテーブルにqueueが記録された。)
PHP
1CACHE_DRIVER=file 2SESSION_DRIVER=file 3#QUEUE_DRIVER=sync 4QUEUE_DRIVER=database
config\queue.phpの内容
PHP
1 */ 2 3 /*'default' => env('QUEUE_DRIVER', 'sync'),*/ 4 'default' => env('QUEUE_DRIVER', 'database'), 5 6 'connections' => [ 7 8 'sync' => [ 9 'driver' => 'sync', 10 ], 11 12 'database' => [ 13 'driver' => 'database', 14 'table' => 'jobs', 15 'queue' => 'default', 16 'expire' => 60, 17 ], 18 19 'beanstalkd' => [ 20 'driver' => 'beanstalkd', 21 'host' => 'localhost', 22 'queue' => 'default', 23 'ttr' => 60, 24 ], 25 26 'sqs' => [ 27 'driver' => 'sqs', 28 'key' => 'your-public-key', 29 'secret' => 'your-secret-key', 30 'queue' => 'your-queue-url', 31 'region' => 'us-east-1', 32 ], 33 34 'iron' => [ 35 'driver' => 'iron', 36 'host' => 'mq-aws-us-east-1.iron.io', 37 'token' => 'your-token', 38 'project' => 'your-project-id', 39 'queue' => 'your-queue-name', 40 'encrypt' => true, 41 ], 42 43 'redis' => [ 44 'driver' => 'redis', 45 'connection' => 'default', 46 'queue' => 'default', 47 'expire' => 60, 48 ], 49 50 ], 51 52 /* 53 |-------------------------------------------------------------------------- 54 | Failed Queue Jobs 55 |-------------------------------------------------------------------------- 56 | 57 | These options configure the behavior of failed queue job logging so you 58 | can control which database and table are used to store the jobs that 59 | have failed. You may change them to any database / table you wish. 60 | 61 */ 62 63 64 'failed' => [ 65 'database' => 'mysql', 'table' => 'failed_jobs', 66 ], 67 68];
試したこと
・php artisan queue:work
を実行 ⇒反応なし。
・php artisan queue:restart
を実行
Broadcasting queue restart signal.
が表示される。
・php artisan queue:restart
を実行
[PDOException] SQLSTATE[HY000] [2002] Connection timed out
・php artisan config:cashe
を実行すると、システムが停止してしまいました。
Laravelが停止したような状態です。(php artisanが一切起動しない。)
しかし、bootstrap\cashe、framework\cache配下を削除して復旧しました。
補足情報
・データベースはPostgresを使っています。
・上記エラーを見ると、DBとの接続エラーに見えるのですが、そうだとしたらなぜQUEUEはDBテーブルにちゃんと書きこめているのかがわかりません。
⇒DB関連の設定のような気はします。
⇒QUEUEを稼働させるためのDB設定が正しくされていない??なのでQUEUEを見つけられない?だからflushが相手を探せずにタイムアウトする?
だとしたら、このqueueのDB設定はどこなのでしょうか?(queue.phpの何かがおかしいと言うことでしょうか?)
まだまだ初心者で、人の書いたプログラムを修正しているレベルです。
未熟な点が多く、大変申し訳ないのですが、よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/19 11:06
2019/07/19 11:13