実現したいこと
現在、laravelを使ってQueueの勉強をしているものです。
/queue
にアクセスした際、Jobクラスにてファイルを生成するプログラムを作成中です。
1回目にアクセスした際はうまくファイルが生成されるのですが
2回目以降/queue
にアクセスしても queue:work が応答しなくなってしまいます。
ただし、手動でjobsテーブルをDELETE FROM jobs;
で削除した後、再度/queue
にアクセスすると動くようになります。
よって、実現したいこととしては、jobsテーブルを手動で削除することなく、2回目以降も queue:work が検知してくれるようにしたいです。
バージョン
"require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "guzzlehttp/guzzle": "^6.5", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0", },
該当する .env
DB_CONNECTION=mysql QUEUE_DRIVER=database
該当する .config/queue.php
'default' => env('QUEUE_DRIVER', 'database'), 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', 'host' => 'localhost', 'queue' => 'default', 'retry_after' => 90, ], 'sqs' => [ 'driver' => 'sqs', 'key' => env('SQS_KEY', 'your-public-key'), 'secret' => env('SQS_SECRET', 'your-secret-key'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'your-queue-name'), 'region' => env('SQS_REGION', 'us-east-1'), ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, ], ],
コード
<Controller> ```ここに言語を入力 class QueueController extends Controller { public function index() { $this->dispatch(new SampleJob()); return view('queue.index'); } } ``` `/queue`にアクセスした際、上記のControllerにてJobクラスである`SampleJob`を呼んでます。<Jobクラス>
class SampleJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct(){} public function handle() { $file = sprintf('%s/%s.txt', storage_path('texts'), date('Q-Ymd-His')); touch($file); $current = file_get_contents($file); file_put_contents($file, $current); } }
Jobクラスにて、/storage/texts
配下にファイルを生成しています。
試したこと
・php artisan queue:work --daemon --queue=high,default
にてqueue:workを実行しています
最後に
稚拙な文章で大変読みにくいかと思いますが、
お分かりになる方がおられましたらご教示頂きければと存じます。
あなたの回答
tips
プレビュー