Trong cuộc sống, bạn sẽ thường gặp phải những tình huống phải triển khai nhiều công việc đồng thời, và dân gian thường nói rằng: Việc dễ thì làm trước, khó làm sau. Queue
của Laravel được xây dựng như vậy, Queue giúp chúng ta phân phối các task, cân bằng không gây trì trệ cho các task sắp tới.
Nội dung chính
- Cài đặt connection với Queues.
- Điều kiện tiên quyết
- Sử dụng Queues với Database.
- Sử dụng Queues với Redis.
- Cấu trúc của class Job
- Dispatch job
- Tạo các worker lắng nghe việc gọi job.
- Sử dụng Supervisor để control nhiều worker.
- Tạm kết
Queue
của Laravel cung cấp cho chúng ta đa dạng các across api
khác nhau như: Beastalk, Amazon sqs, Redis,... Queue
cho phép hoãn lại các task
tiêu thụ nhiều thời gian, ví dụ như gửi mail, giúp tăng tốc độ phản hồi cho ứng dụng web.
Cài đặt connection với Queues.
Trong file config/queue.php
, chứa các lựa chọn connection với Queues
. Các dịch vụ được định nghĩa mặc định như Amazon SQS, Beanstalk, hay Redis.
'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', '//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,
'block_for' => null,
],
],
Điều kiện tiên quyết
Sử dụng Queues với Database.
Để sử dụng Queues với Database bạn cần tạo bảng để
lưu giữ jobs
. Laravel đã xây dựng sẵn command để tạo tự động bảng trong DB. Bạn chỉ cần chạy command
php artisan queue:table
php artisan migrate
Sử dụng Queues với Redis.
Cấu hình để sử dụng với Redis DB, bạn cần sửa trong config/queue.php
. Nếu Redis của bạn sử dụng 1 Redis Cluster, tên của Queues phải có key hash tag
, nó bắt buộc để đảm bảo rằng tất cả Redis key cho các cụm queue được đặt cùng vị trí của hash.
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => '{default}',
'retry_after' => 90,
],
Ngoài ra
Ngoài ra bạn cần cài thêm các package:
- Amazon
SQS:
aws/aws-sdk-php ~3.0
- Beanstalkd:
pda/pheanstalk ~3.0
- Redis:
predis/predis ~1.0
Tạo Job
Mặc định các Job trên queue được đặt trong thư mục app/Jobs
, nó sẽ được tạo mặc định khi bạn chạy command make:job
. Để tạo 1 job bằng Artisan CLI bạn chạy lệnh:
php artisan make:job NewJob
Cấu trúc của class Job
Sau khi sử dụng Artisan CLI, bạn sẽ có 1 file như sau