Yêu cầu thg 4 25, 2020 7:38 SA 203 0 2
  • 203 0 2
0

Tìm hiểu về queues và Task Scheduling

Chia sẻ
  • 203 0 2

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


Đã trả lời thg 4 26, 2020 12:21 SA
+1

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ới redis
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 😄

Chia sẻ
thg 4 27, 2020 3:32 SA

Vâng em cảm ơn ạ

Avatar Michael Scofield @simple1805
thg 4 27, 2020 6:14 SA

@khanh1234 Config được chưa em

thg 4 28, 2020 1:23 SA

@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 ạ,

thg 4 28, 2020 1:24 SA

@huusu1996 em lưu job ở database ạ

Avatar Lê Vĩnh Thiện @le.vinh.thien
thg 4 29, 2020 2:48 CH

@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
{
//
}
Đã trả lời thg 4 25, 2020 10:43 SA
0

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é

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí