Tìm hiểu về queues và Task Scheduling
Chào mọi người hiện em đang gặp phải một vấn khi queue để tổng hợp user khi tạo trong laravel,em có tạo queue:table ,và tạo make:job ,nhưng khi thực hiện tạo và đăng nhập user,trong log hiện thông tin và tổng user đã tạo,sau khi em chạy queue:work thì table job k insert được dữ liệu ạ
2 CÂU TRẢ LỜI
Vì câu hỏi của bạn chưa rõ ràng về cấu hình queue ra sao nên mình cứ trả lời theo cách mình vẫn hay làm vậy. Thường thì mọi người hay cấu hình lưu job ở database
hoặc redis
. Mình thì hay chọn redis
nên mình setup như nhau.
- Cài đặt redis
sudo apt-get update
sudo apt-get install redis-server
- Kiểm tra xem nó đã được cài đặt hay chưa ? Nếu output là PONG thì coi như cài đặt thành công
redis-cli
127.0.0.1:6379> ping
//Output
PONG
- Tiếp theo là cài đặt
predis
đểLaravel
thao tác vớiredis
composer require predis/predis
- Cấu hình .env trong
Laravel
QUEUE_DRIVER=redis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_CLIENT=predis
- Chạy câu lệnh để lằng nghe các job trong queue ở một terminal và giữ nguyên chúng trong quá trình làm việc ở local.
php artisan queue:restart // Cẩn thận nên mình khởi động lại queue
php artisan queue:work redis
- Khi có 1 job được lắng nghe trên terminal sẽ hiển thị như sau. Trường này là job của mình đang bị fail
SUN-ASTERISK\nguyen.huu.su@b122087-pc:~/Framgia-project/manager_shirt$ php artisan queue:work redis
[2020-04-26 07:16:16][pufXwWA6lXRXesqc5yGrJVelYBRQtYr7] Processing: App\Jobs\ProcessGetDataSheet
[2020-04-26 07:18:37][pufXwWA6lXRXesqc5yGrJVelYBRQtYr7] Failed: App\Jobs\ProcessGetDataSheet
- Khi queue lỗi thì theo config mặc định của file config/queue.php sẽ lưu vào bảng
fail_jobs
như sau
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database'),
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
Chúc bạn may mắn
Vâng em cảm ơn ạ
@khanh1234 Config được chưa em
@huusu1996 trong queue ở config em cx đổi thành QUEUE_DRIVER nhưng tùy từng job mà nó mới insert vào bảng job ở data anh ạ,không hiểu sao ạ,
@huusu1996 em lưu job ở database ạ
@khanh1234 để job có thể đc lưu trong DB thì ngoài việc config driver thì job phải đc implements ShouldQueue ví dụ
use Illuminate\Contracts\Queue\ShouldQueue;
class ClientDailyJob implements ShouldQueue
{
//
}
bạn thử kiểm tra cấu hình trong file .env xem
QUEUE_CONNECTION=database
chưa. nếu có rồi. thì vì job đã thực hiện thành công nên đã xóa bản nghi trong table job đi. còn nếu job chạy bị lỗi thì sẽ đk lưu vào bảng failed_jobs nhé