Asked Apr 25th, 2020 7:38 AM 163 0 2
  • 163 0 2
0

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

Share
  • 163 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 ANSWERS


Answered Apr 26th, 2020 12:21 AM
+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.[email protected]-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 😄

Share
Apr 27th, 2020 3:32 AM

Vâng em cảm ơn ạ

0
| Reply
Share
Quiet @simple1805
Apr 27th, 2020 6:14 AM

@khanh1234 Config được chưa em

0
| Reply
Share
Apr 28th, 2020 1:23 AM

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

0
| Reply
Share
Apr 28th, 2020 1:24 AM

@huusu1996 em lưu job ở database ạ

0
| Reply
Share
Lê Vĩnh Thiện @le.vinh.thien
Apr 29th, 2020 2:48 PM

@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
{
//
}
0
| Reply
Share
Answered Apr 25th, 2020 10:43 AM
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é

Share