Trong khi xây dựng ứng dụng web của mình, bạn có thể có một số tác vụ, chẳng hạn như phân tích cú pháp và lưu trữ tệp CSV đã tải lên, mất quá nhiều thời gian để thực hiện trong một yêu cầu web thông thường. Rất may, Laravel cho phép bạn dễ dàng tạo queued job có thể được xử lý ở chế độ nền. Bằng cách chuyển các tác vụ tốn nhiều thời gian vào một hàng đợi, ứng dụng của bạn có thể đáp ứng các yêu cầu web với tốc độ cực nhanh và cung cấp trải nghiệm người dùng tốt hơn cho khách hàng của bạn
Hàng đợi của Laravel cung cấp API xếp hàng thống nhất trên nhiều phụ trợ hàng đợi khác nhau, chẳng hạn như Amazon SQS, Redis hoặc thậm chí là cơ sở dữ liệu quan hệ
Các tùy chọn cấu hình hàng đợi của Laravel được lưu trữ trong tệp cấu hình
php artisan queue:work --queue=high,default
05 của ứng dụng của bạn. Trong tệp này, bạn sẽ tìm thấy các cấu hình kết nối cho từng trình điều khiển hàng đợi đi kèm với khung, bao gồm cơ sở dữ liệu, trình điều khiển Amazon SQS, Redis và Beanstalkd, cũng như trình điều khiển đồng bộ sẽ thực thi công việc ngay lập tức [để sử dụng trong quá trình . Trình điều khiển hàng đợi php artisan queue:work --queue=high,default
06 cũng được bao gồm để loại bỏ các công việc được xếp hàng đợiLưu ý
Laravel hiện cung cấp Horizon, một bảng điều khiển đẹp mắt và hệ thống cấu hình cho hàng đợi do Redis hỗ trợ của bạn. Kiểm tra tài liệu Horizon đầy đủ để biết thêm thông tin.
Kết nối Vs. hàng đợi
Trước khi bắt đầu với hàng đợi Laravel, điều quan trọng là phải hiểu sự khác biệt giữa "kết nối" và "hàng đợi". Trong tệp cấu hình
php artisan queue:work --queue=high,default
05 của bạn, có một mảng cấu hình php artisan queue:work --queue=high,default
08. Tùy chọn này xác định các kết nối đến các dịch vụ hàng đợi phụ trợ, chẳng hạn như Amazon SQS, Beanstalk hoặc Redis. Tuy nhiên, bất kỳ kết nối hàng đợi cụ thể nào cũng có thể có nhiều "hàng đợi" có thể được coi là các ngăn xếp hoặc chồng công việc được xếp hàng khác nhauLưu ý rằng mỗi ví dụ cấu hình kết nối trong tệp cấu hình
php artisan queue:work --queue=high,default
09 chứa thuộc tính php artisan queue:work --queue=high,default
09. Đây là hàng đợi mặc định mà các công việc sẽ được gửi đến khi chúng được gửi đến một kết nối nhất định. Nói cách khác, nếu bạn gửi một công việc mà không xác định rõ ràng công việc đó sẽ được gửi đến hàng đợi nào, thì công việc đó sẽ được đặt trên hàng đợi được xác định trong thuộc tính php artisan queue:work --queue=high,default
09 của cấu hình kết nốiuse App\Jobs\ProcessPodcast;
// This job is sent to the default connection's default queue...
ProcessPodcast::dispatch[];
// This job is sent to the default connection's "emails" queue...
ProcessPodcast::dispatch[]->onQueue['emails'];
Một số ứng dụng có thể không cần đẩy công việc lên nhiều hàng đợi, thay vào đó, ưu tiên có một hàng đợi đơn giản. Tuy nhiên, đẩy công việc vào nhiều hàng đợi có thể đặc biệt hữu ích cho các ứng dụng muốn ưu tiên hoặc phân đoạn cách xử lý công việc, vì queue worker của Laravel cho phép bạn chỉ định hàng đợi nào nó sẽ xử lý theo mức độ ưu tiên. Ví dụ: nếu bạn đẩy công việc vào hàng đợi
php artisan queue:work --queue=high,default
12, bạn có thể chạy một công nhân mang lại cho họ mức độ ưu tiên xử lý cao hơnphp artisan queue:work --queue=high,default
Ghi chú & điều kiện tiên quyết cho trình điều khiển
cơ sở dữ liệu
Để sử dụng trình điều khiển hàng đợi
php artisan queue:work --queue=high,default
13, bạn sẽ cần một bảng cơ sở dữ liệu để giữ các công việc. Để tạo di chuyển tạo bảng này, hãy chạy lệnh php artisan queue:work --queue=high,default
14 Artisan. Khi quá trình di chuyển đã được tạo, bạn có thể di chuyển cơ sở dữ liệu của mình bằng lệnh php artisan queue:work --queue=high,default
15Cuối cùng, đừng quên hướng dẫn ứng dụng của bạn sử dụng trình điều khiển
php artisan queue:work --queue=high,default
13 bằng cách cập nhật biến php artisan queue:work --queue=high,default
17 trong tệp php artisan queue:work --queue=high,default
18 của ứng dụng của bạnphp artisan queue:work --queue=high,default
6làm lại
Để sử dụng trình điều khiển hàng đợi
php artisan queue:work --queue=high,default
19, bạn nên định cấu hình kết nối cơ sở dữ liệu Redis trong tệp cấu hình php artisan queue:work --queue=high,default
20 của mìnhCụm Redis
Nếu kết nối hàng đợi Redis của bạn sử dụng Cụm Redis, tên hàng đợi của bạn phải chứa thẻ băm chính. Điều này là bắt buộc để đảm bảo tất cả các khóa Redis cho một hàng đợi nhất định được đặt vào cùng một vị trí băm
chặn
Khi sử dụng hàng đợi Redis, bạn có thể sử dụng tùy chọn cấu hình
php artisan queue:work --queue=high,default
21 để chỉ định khoảng thời gian trình điều khiển sẽ đợi một công việc khả dụng trước khi lặp qua vòng lặp worker và thăm dò lại cơ sở dữ liệu RedisViệc điều chỉnh giá trị này dựa trên tải hàng đợi của bạn có thể hiệu quả hơn việc liên tục thăm dò cơ sở dữ liệu Redis để tìm công việc mới. Chẳng hạn, bạn có thể đặt giá trị thành
php artisan queue:work --queue=high,default
22 để cho biết rằng trình điều khiển sẽ chặn trong năm giây trong khi chờ công việc khả dụngCảnh báo
Đặt21 thành
php artisan queue:work --queue=high,default
24 sẽ khiến nhân viên xếp hàng bị chặn vô thời hạn cho đến khi có việc làm. Điều này cũng sẽ ngăn các tín hiệu như
php artisan queue:work --queue=high,default
25 được xử lý cho đến khi công việc tiếp theo được xử lý.
php artisan queue:work --queue=high,default
Các điều kiện tiên quyết khác của trình điều khiển
Các phụ thuộc sau đây là cần thiết cho trình điều khiển hàng đợi được liệt kê. Các phụ thuộc này có thể được cài đặt thông qua trình quản lý gói Composer
- Amazon SQS.
26php artisan queue:work --queue=high,default
- cây đậu.
27php artisan queue:work --queue=high,default
- làm lại.
28 hoặc phần mở rộng phpredis PHPphp artisan queue:work --queue=high,default
Tạo công việc
Tạo các lớp công việc
Theo mặc định, tất cả các công việc có thể xếp hàng cho ứng dụng của bạn được lưu trữ trong thư mục
php artisan queue:work --queue=high,default
29. Nếu thư mục php artisan queue:work --queue=high,default
29 không tồn tại, nó sẽ được tạo khi bạn chạy lệnh php artisan queue:work --queue=high,default
31 Artisanphp artisan queue:work --queue=high,default
0Lớp được tạo sẽ triển khai giao diện
php artisan queue:work --queue=high,default
32, cho Laravel biết rằng công việc sẽ được đẩy vào hàng đợi để chạy không đồng bộLưu ý
Sơ khai công việc có thể được tùy chỉnh bằng cách sử dụng xuất bản sơ khai.
Cấu trúc lớp học
Các lớp công việc rất đơn giản, thường chỉ chứa một phương thức
php artisan queue:work --queue=high,default
33 được gọi khi công việc được xử lý bởi hàng đợi. Để bắt đầu, chúng ta hãy xem một lớp công việc ví dụ. Trong ví dụ này, chúng tôi sẽ giả vờ rằng chúng tôi quản lý một dịch vụ xuất bản podcast và cần xử lý các tệp podcast đã tải lên trước khi chúng được xuất bảnphp artisan queue:work --queue=high,default
3Trong ví dụ này, lưu ý rằng chúng ta có thể chuyển trực tiếp một Eloquent model vào hàm tạo của queued job. Do đặc điểm của
php artisan queue:work --queue=high,default
34 mà tác vụ đang sử dụng, các mô hình Eloquent và các mối quan hệ được tải của chúng sẽ được tuần tự hóa và hủy tuần tự hóa một cách duyên dáng khi tác vụ đang xử lýIf your queued job accepts an Eloquent model in its constructor, only the identifier for the model will be serialized onto the queue. When the job is actually handled, the queue system will automatically re-retrieve the full model instance and its loaded relationships from the database. This approach to model serialization allows for much smaller job payloads to be sent to your queue driver
php artisan queue:work --queue=high,default
33 Method Dependency Injection
php artisan queue:work --queue=high,default
The
php artisan queue:work --queue=high,default
33 method is invoked when the job is processed by the queue. Note that we are able to type-hint dependencies on the php artisan queue:work --queue=high,default
33 method of the job. The Laravel service container automatically injects these dependenciesIf you would like to take total control over how the container injects dependencies into the
php artisan queue:work --queue=high,default
33 method, you may use the container's php artisan queue:work --queue=high,default
39 method. The php artisan queue:work --queue=high,default
39 method accepts a callback which receives the job and the container. Within the callback, you are free to invoke the php artisan queue:work --queue=high,default
33 method however you wish. Typically, you should call this method from the php artisan queue:work --queue=high,default
42 method of your php artisan queue:work --queue=high,default
43 service providerphp artisan queue:work --queue=high,default
4Warning
Binary data, such as raw image contents, should be passed through the44 function before being passed to a queued job. Otherwise, the job may not properly serialize to JSON when being placed on the queue.
php artisan queue:work --queue=high,default
Queued Relationships
Because loaded relationships also get serialized, the serialized job string can sometimes become quite large. To prevent relations from being serialized, you can call the
php artisan queue:work --queue=high,default
45 method on the model when setting a property value. This method will return an instance of the model without its loaded relationshipsphp artisan queue:work --queue=high,default
7Furthermore, when a job is deserialized and model relationships are re-retrieved from the database, they will be retrieved in their entirety. Any previous relationship constraints that were applied before the model was serialized during the job queueing process will not be applied when the job is deserialized. Therefore, if you wish to work with a subset of a given relationship, you should re-constrain that relationship within your queued job
Unique Jobs
Warning
Unique jobs require a cache driver that supports locks. Currently, the46,
php artisan queue:work --queue=high,default
19,
php artisan queue:work --queue=high,default
48,
php artisan queue:work --queue=high,default
13,
php artisan queue:work --queue=high,default
50, and
php artisan queue:work --queue=high,default
51 cache drivers support atomic locks. In addition, unique job constraints do not apply to jobs within batches.
php artisan queue:work --queue=high,default
Sometimes, you may want to ensure that only one instance of a specific job is on the queue at any point in time. You may do so by implementing the
php artisan queue:work --queue=high,default
52 interface on your job class. This interface does not require you to define any additional methods on your classphp artisan queue:work --queue=high,default
5In the example above, the
php artisan queue:work --queue=high,default
53 job is unique. So, the job will not be dispatched if another instance of the job is already on the queue and has not finished processingIn certain cases, you may want to define a specific "key" that makes the job unique or you may want to specify a timeout beyond which the job no longer stays unique. To accomplish this, you may define
php artisan queue:work --queue=high,default
54 and php artisan queue:work --queue=high,default
55 properties or methods on your job classphp artisan queue:work --queue=high,default
9In the example above, the
php artisan queue:work --queue=high,default
53 job is unique by a product ID. So, any new dispatches of the job with the same product ID will be ignored until the existing job has completed processing. In addition, if the existing job is not processed within one hour, the unique lock will be released and another job with the same unique key can be dispatched to the queueCảnh báo
Nếu ứng dụng của bạn gửi công việc từ nhiều máy chủ web hoặc vùng chứa, bạn nên đảm bảo rằng tất cả các máy chủ của mình đang giao tiếp với cùng một máy chủ bộ đệm trung tâm để Laravel có thể xác định chính xác xem liệu .
Duy trì công việc duy nhất cho đến khi bắt đầu xử lý
Theo mặc định, các công việc duy nhất được "mở khóa" sau khi một công việc hoàn thành xử lý hoặc thất bại trong tất cả các lần thử lại. Tuy nhiên, có thể có những tình huống mà bạn muốn công việc của mình được mở khóa ngay lập tức trước khi nó được xử lý. Để thực hiện điều này, công việc của bạn nên thực hiện hợp đồng
php artisan queue:work --queue=high,default
57 thay vì hợp đồng php artisan queue:work --queue=high,default
52php artisan queue:work --queue=high,default
3Khóa công việc duy nhất
Đằng sau hậu trường, khi một công việc
php artisan queue:work --queue=high,default
52 được gửi đi, Laravel cố gắng lấy khóa bằng khóa php artisan queue:work --queue=high,default
54. Nếu khóa không được lấy, công việc sẽ không được gửi đi. Khóa này được giải phóng khi công việc hoàn thành xử lý hoặc thất bại trong tất cả các lần thử lại. Theo mặc định, Laravel sẽ sử dụng trình điều khiển bộ đệm mặc định để lấy khóa này. Tuy nhiên, nếu bạn muốn sử dụng trình điều khiển khác để lấy khóa, bạn có thể xác định phương thức php artisan queue:work --queue=high,default
61 trả về trình điều khiển bộ đệm sẽ được sử dụngphp artisan queue:work --queue=high,default
0Lưu ý
Nếu bạn chỉ cần hạn chế xử lý đồng thời một công việc, hãy sử dụng phần mềm trung gian công việc62 để thay thế.
php artisan queue:work --queue=high,default
Phần mềm trung gian việc làm
Phần mềm trung gian công việc cho phép bạn bọc logic tùy chỉnh xung quanh việc thực hiện các công việc được xếp hàng đợi, giảm bản mẫu trong chính các công việc. Ví dụ: hãy xem xét phương pháp
php artisan queue:work --queue=high,default
33 sau đây, tận dụng các tính năng giới hạn tốc độ Redis của Laravel để chỉ cho phép một công việc được xử lý cứ sau 5 giâyphp artisan queue:work --queue=high,default
1Mặc dù mã này hợp lệ, nhưng việc triển khai phương thức
php artisan queue:work --queue=high,default
33 trở nên ồn ào vì nó bị lộn xộn với logic giới hạn tốc độ Redis. Ngoài ra, logic giới hạn tỷ lệ này phải được sao chép cho bất kỳ công việc nào khác mà chúng tôi muốn giới hạn tỷ lệThay vì giới hạn tốc độ trong phương thức xử lý, chúng tôi có thể xác định phần mềm trung gian công việc xử lý giới hạn tốc độ. Laravel không có vị trí mặc định cho phần mềm trung gian công việc, vì vậy bạn có thể đặt phần mềm trung gian công việc ở bất kỳ đâu trong ứng dụng của mình. Trong ví dụ này, chúng tôi sẽ đặt phần mềm trung gian trong thư mục
php artisan queue:work --queue=high,default
65php artisan queue:work --queue=high,default
2Như bạn có thể thấy, giống như phần mềm trung gian định tuyến, phần mềm trung gian công việc nhận công việc đang được xử lý và một cuộc gọi lại sẽ được gọi để tiếp tục xử lý công việc
Sau khi tạo phần mềm trung gian công việc, chúng có thể được gắn vào một công việc bằng cách trả lại chúng từ phương thức
php artisan queue:work --queue=high,default
66 của công việc. Phương pháp này không tồn tại trên các công việc được tạo bởi lệnh php artisan queue:work --queue=high,default
31 Artisan, vì vậy bạn sẽ cần thêm nó vào lớp công việc của mình theo cách thủ côngphp artisan queue:work --queue=high,default
3Lưu ý
Phần mềm trung gian công việc cũng có thể được chỉ định cho các trình xử lý sự kiện, thư có thể xếp hàng đợi và thông báo.
Giới hạn tỷ lệ
Mặc dù chúng tôi chỉ trình bày cách viết phần mềm trung gian giới hạn tốc độ của riêng bạn, Laravel thực sự bao gồm một phần mềm trung gian giới hạn tốc độ mà bạn có thể sử dụng để xếp hạng các tác vụ giới hạn. Giống như các bộ giới hạn tốc độ định tuyến, các bộ giới hạn tốc độ công việc được xác định bằng cách sử dụng phương pháp
php artisan queue:work --queue=high,default
69 của mặt tiền php artisan queue:work --queue=high,default
68Ví dụ: bạn có thể muốn cho phép người dùng sao lưu dữ liệu của họ mỗi giờ một lần trong khi không áp đặt giới hạn như vậy đối với khách hàng cao cấp. Để thực hiện điều này, bạn có thể xác định một
php artisan queue:work --queue=high,default
68 trong phương pháp php artisan queue:work --queue=high,default
42 của php artisan queue:work --queue=high,default
72 của bạnphp artisan queue:work --queue=high,default
4Trong ví dụ trên, chúng tôi đã xác định giới hạn tỷ lệ hàng giờ; . Ngoài ra, bạn có thể chuyển bất kỳ giá trị nào bạn muốn sang phương pháp
php artisan queue:work --queue=high,default
74 của giới hạn tỷ lệ; php artisan queue:work --queue=high,default
5Khi bạn đã xác định giới hạn tốc độ của mình, bạn có thể đính kèm bộ giới hạn tốc độ vào công việc sao lưu của mình bằng phần mềm trung gian
php artisan queue:work --queue=high,default
75. Mỗi khi công việc vượt quá giới hạn tốc độ, phần mềm trung gian này sẽ giải phóng công việc trở lại hàng đợi với độ trễ thích hợp dựa trên thời lượng giới hạn tốc độphp artisan queue:work --queue=high,default
6Việc giải phóng một công việc bị giới hạn tốc độ trở lại hàng đợi sẽ vẫn làm tăng tổng số lượng công việc của công việc là
php artisan queue:work --queue=high,default
76. Bạn có thể muốn điều chỉnh các thuộc tính php artisan queue:work --queue=high,default
77 và php artisan queue:work --queue=high,default
78 trên lớp công việc của mình cho phù hợp. Hoặc, bạn có thể muốn sử dụng phương pháp php artisan queue:work --queue=high,default
79 để xác định khoảng thời gian cho đến khi công việc không còn được thực hiện nữaNếu bạn không muốn một công việc được thử lại khi nó bị giới hạn tốc độ, bạn có thể sử dụng phương pháp
php artisan queue:work --queue=high,default
80php artisan queue:work --queue=high,default
7Lưu ý
Nếu đang sử dụng Redis, bạn có thể sử dụng phần mềm trung gian81, được tinh chỉnh cho Redis và hiệu quả hơn phần mềm trung gian giới hạn tốc độ cơ bản.
php artisan queue:work --queue=high,default
Ngăn ngừa chồng chéo công việc
Laravel bao gồm một phần mềm trung gian
php artisan queue:work --queue=high,default
82 cho phép bạn ngăn chồng chéo công việc dựa trên một khóa tùy ý. Điều này có thể hữu ích khi một công việc trong hàng đợi đang sửa đổi một tài nguyên mà mỗi lần chỉ nên sửa đổi một công việcVí dụ: giả sử bạn có một công việc được xếp hàng chờ cập nhật điểm tín dụng của người dùng và bạn muốn ngăn chồng chéo công việc cập nhật điểm tín dụng cho cùng một ID người dùng. Để thực hiện điều này, bạn có thể trả lại phần mềm trung gian
php artisan queue:work --queue=high,default
62 từ phương thức php artisan queue:work --queue=high,default
66 của công việc của bạnphp artisan queue:work --queue=high,default
8Mọi công việc chồng chéo cùng loại sẽ được đưa trở lại hàng đợi. Bạn cũng có thể chỉ định số giây phải trôi qua trước khi công việc được phát hành sẽ được thử lại
php artisan queue:work --queue=high,default
9Nếu bạn muốn xóa ngay bất kỳ công việc chồng chéo nào để chúng không bị thử lại, bạn có thể sử dụng phương pháp
php artisan queue:work --queue=high,default
80php artisan queue:work --queue=high,default
60Phần mềm trung gian
php artisan queue:work --queue=high,default
62 được cung cấp bởi tính năng khóa nguyên tử của Laravel. Đôi khi, công việc của bạn có thể bị lỗi hoặc hết thời gian chờ bất ngờ khiến khóa không được giải phóng. Do đó, bạn có thể xác định rõ ràng thời gian hết hạn khóa bằng phương pháp php artisan queue:work --queue=high,default
87. Ví dụ: ví dụ bên dưới sẽ hướng dẫn Laravel giải phóng khóa php artisan queue:work --queue=high,default
62 ba phút sau khi công việc bắt đầu xử lýphp artisan queue:work --queue=high,default
61Cảnh báo Phần mềm trung gian
62 yêu cầu trình điều khiển bộ đệm hỗ trợ khóa. Hiện tại, trình điều khiển bộ nhớ cache
php artisan queue:work --queue=high,default
46,
php artisan queue:work --queue=high,default
19,
php artisan queue:work --queue=high,default
48,
php artisan queue:work --queue=high,default
13,
php artisan queue:work --queue=high,default
50 và
php artisan queue:work --queue=high,default
51 hỗ trợ khóa nguyên tử
php artisan queue:work --queue=high,default
Chia sẻ khóa khóa giữa các lớp công việc
Theo mặc định, phần mềm trung gian
php artisan queue:work --queue=high,default
62 sẽ chỉ ngăn các công việc chồng chéo của cùng một lớp. Vì vậy, mặc dù hai lớp công việc khác nhau có thể sử dụng cùng một khóa khóa, nhưng chúng sẽ không bị chồng chéo. Tuy nhiên, bạn có thể hướng dẫn Laravel áp dụng khóa trên các lớp công việc bằng cách sử dụng phương thức php artisan queue:work --queue=high,default
97php artisan queue:work --queue=high,default
62Điều chỉnh ngoại lệ
Laravel bao gồm một phần mềm trung gian
php artisan queue:work --queue=high,default
98 cho phép bạn loại bỏ các ngoại lệ. Khi công việc đưa ra một số ngoại lệ nhất định, tất cả các nỗ lực tiếp theo để thực hiện công việc sẽ bị trì hoãn cho đến khi hết một khoảng thời gian xác định. Phần mềm trung gian này đặc biệt hữu ích cho các công việc tương tác với các dịch vụ của bên thứ ba không ổn địnhVí dụ: hãy tưởng tượng một công việc được xếp hàng đợi tương tác với API của bên thứ ba bắt đầu đưa ra các ngoại lệ. Để hạn chế các ngoại lệ, bạn có thể trả lại phần mềm trung gian
php artisan queue:work --queue=high,default
99 từ phương thức php artisan queue:work --queue=high,default
66 của công việc của bạn. Thông thường, phần mềm trung gian này nên được ghép nối với một công việc thực hiện các nỗ lực dựa trên thời gianphp artisan queue:work --queue=high,default
63Đối số hàm tạo đầu tiên được phần mềm trung gian chấp nhận là số lượng ngoại lệ mà công việc có thể đưa ra trước khi được điều chỉnh, trong khi đối số hàm tạo thứ hai là số phút sẽ trôi qua trước khi công việc được thử lại sau khi nó được điều chỉnh. Trong ví dụ mã ở trên, nếu công việc đưa ra 10 ngoại lệ trong vòng 5 phút, chúng tôi sẽ đợi 5 phút trước khi thử lại công việc
Khi một công việc đưa ra một ngoại lệ nhưng chưa đạt đến ngưỡng ngoại lệ, công việc thường sẽ được thử lại ngay lập tức. Tuy nhiên, bạn có thể chỉ định số phút mà một công việc như vậy sẽ bị trì hoãn bằng cách gọi phương thức
php artisan queue:work --queue=high,default
601 khi đính kèm phần mềm trung gian vào công việcphp artisan queue:work --queue=high,default
64Bên trong, phần mềm trung gian này sử dụng hệ thống bộ đệm của Laravel để triển khai giới hạn tốc độ và tên lớp của công việc được sử dụng làm "chìa khóa" bộ đệm. Bạn có thể ghi đè khóa này bằng cách gọi phương thức
php artisan queue:work --queue=high,default
74 khi đính kèm phần mềm trung gian vào công việc của bạn. Điều này có thể hữu ích nếu bạn có nhiều công việc tương tác với cùng một dịch vụ của bên thứ ba và bạn muốn chúng chia sẻ một "bộ chứa" điều chỉnh chungphp artisan queue:work --queue=high,default
65Lưu ý
Nếu bạn đang sử dụng Redis, bạn có thể sử dụng phần mềm trung gian603, được tinh chỉnh cho Redis và hiệu quả hơn phần mềm trung gian điều tiết ngoại lệ cơ bản.
php artisan queue:work --queue=high,default
Việc làm nhân viên điều phối
Khi bạn đã viết lớp công việc của mình, bạn có thể gửi nó bằng cách sử dụng phương pháp
php artisan queue:work --queue=high,default
604 trên chính công việc đó. Các đối số được truyền cho phương thức php artisan queue:work --queue=high,default
604 sẽ được trao cho hàm tạo của công việcphp artisan queue:work --queue=high,default
66Nếu bạn muốn gửi một công việc có điều kiện, bạn có thể sử dụng các phương pháp
php artisan queue:work --queue=high,default
606 và php artisan queue:work --queue=high,default
607php artisan queue:work --queue=high,default
67Trong các ứng dụng Laravel mới, trình điều khiển
php artisan queue:work --queue=high,default
608 là trình điều khiển hàng đợi mặc định. Trình điều khiển này thực thi các công việc một cách đồng bộ ở nền trước của yêu cầu hiện tại, điều này thường thuận tiện trong quá trình phát triển cục bộ. Nếu bạn thực sự muốn bắt đầu xếp hàng các công việc để xử lý nền, bạn có thể chỉ định một trình điều khiển hàng đợi khác trong tệp cấu hình php artisan queue:work --queue=high,default
05 của ứng dụng của bạnGửi hàng bị trì hoãn
Nếu bạn muốn chỉ định rằng một công việc sẽ không có sẵn ngay lập tức để nhân viên xếp hàng xử lý, bạn có thể sử dụng phương pháp
php artisan queue:work --queue=high,default
610 khi gửi công việc. Ví dụ: hãy chỉ định rằng một công việc sẽ không có sẵn để xử lý cho đến 10 phút sau khi nó được gửi điphp artisan queue:work --queue=high,default
68Cảnh báo
Dịch vụ xếp hàng Amazon SQS có thời gian trễ tối đa là 15 phút.
Gửi đi sau khi phản hồi được gửi đến trình duyệt
Ngoài ra, phương thức
php artisan queue:work --queue=high,default
611 trì hoãn gửi một công việc cho đến sau khi phản hồi HTTP được gửi tới trình duyệt của người dùng nếu máy chủ web của bạn đang sử dụng FastCGI. Điều này sẽ vẫn cho phép người dùng bắt đầu sử dụng ứng dụng mặc dù công việc được xếp hàng đợi vẫn đang được thực thi. Điều này thường chỉ nên được sử dụng cho các công việc mất khoảng một giây, chẳng hạn như gửi email. Vì chúng được xử lý trong yêu cầu HTTP hiện tại, nên các công việc được gửi theo cách này không yêu cầu nhân viên xếp hàng đang chạy để chúng được xử lýphp artisan queue:work --queue=high,default
69Bạn cũng có thể
php artisan queue:work --queue=high,default
604 một lần đóng và xâu chuỗi phương thức php artisan queue:work --queue=high,default
613 vào trình trợ giúp php artisan queue:work --queue=high,default
604 để thực hiện một lần đóng sau khi phản hồi HTTP đã được gửi tới trình duyệtphp artisan queue:work --queue=high,default
00Điều độ đồng bộ
Nếu bạn muốn gửi một công việc ngay lập tức [đồng bộ], bạn có thể sử dụng phương pháp
php artisan queue:work --queue=high,default
615. Khi sử dụng phương pháp này, công việc sẽ không được xếp hàng đợi và sẽ được thực hiện ngay lập tức trong quy trình hiện tạiphp artisan queue:work --queue=high,default
01Công việc & Giao dịch cơ sở dữ liệu
Mặc dù việc gửi các công việc trong các giao dịch cơ sở dữ liệu là hoàn toàn bình thường, nhưng bạn nên đặc biệt lưu ý để đảm bảo rằng công việc của bạn thực sự có thể thực hiện thành công. Khi gửi một công việc trong một giao dịch, có thể công việc sẽ được xử lý bởi một công nhân trước khi giao dịch gốc được thực hiện. Khi điều này xảy ra, mọi cập nhật bạn đã thực hiện đối với mô hình hoặc bản ghi cơ sở dữ liệu trong [các] giao dịch cơ sở dữ liệu có thể chưa được phản ánh trong cơ sở dữ liệu. Ngoài ra, bất kỳ mô hình hoặc bản ghi cơ sở dữ liệu nào được tạo trong [các] giao dịch có thể không tồn tại trong cơ sở dữ liệu
Rất may, Laravel cung cấp một số phương pháp giải quyết vấn đề này. Trước tiên, bạn có thể đặt tùy chọn kết nối
php artisan queue:work --queue=high,default
616 trong mảng cấu hình của kết nối hàng đợi của mìnhKhi tùy chọn
php artisan queue:work --queue=high,default
616 là php artisan queue:work --queue=high,default
618, bạn có thể gửi công việc trong các giao dịch cơ sở dữ liệu; . Tất nhiên, nếu không có giao dịch cơ sở dữ liệu nào hiện đang mở, công việc sẽ được gửi đi ngay lập tứcNếu một giao dịch bị khôi phục do ngoại lệ xảy ra trong quá trình giao dịch, các công việc đã được gửi đi trong giao dịch đó sẽ bị loại bỏ
Lưu ý
Việc đặt tùy chọn cấu hình616 thành
php artisan queue:work --queue=high,default
618 cũng sẽ khiến mọi trình xử lý sự kiện xếp hàng, thư, thông báo và sự kiện phát sóng được gửi đi sau khi tất cả các giao dịch cơ sở dữ liệu mở đã được thực hiện.
php artisan queue:work --queue=high,default
Chỉ định hành vi công văn cam kết nội tuyến
Nếu bạn không đặt tùy chọn cấu hình kết nối hàng đợi
php artisan queue:work --queue=high,default
616 thành php artisan queue:work --queue=high,default
618, bạn vẫn có thể chỉ ra rằng một công việc cụ thể sẽ được gửi đi sau khi tất cả các giao dịch cơ sở dữ liệu mở đã được thực hiện. Để thực hiện điều này, bạn có thể xâu chuỗi phương thức php artisan queue:work --queue=high,default
623 vào thao tác điều phối của mìnhphp artisan queue:work --queue=high,default
02Tương tự như vậy, nếu tùy chọn cấu hình
php artisan queue:work --queue=high,default
616 được đặt thành php artisan queue:work --queue=high,default
618, bạn có thể cho biết rằng một công việc cụ thể sẽ được gửi đi ngay lập tức mà không cần đợi bất kỳ giao dịch cơ sở dữ liệu mở nào được thực hiệnphp artisan queue:work --queue=high,default
03chuỗi công việc
Chuỗi công việc cho phép bạn chỉ định danh sách các công việc được xếp hàng đợi sẽ được chạy theo thứ tự sau khi công việc chính đã thực hiện thành công. Nếu một công việc trong chuỗi không thành công, các công việc còn lại sẽ không được chạy. Để thực thi chuỗi công việc được xếp hàng đợi, bạn có thể sử dụng phương thức
php artisan queue:work --queue=high,default
626 được cung cấp bởi mặt tiền php artisan queue:work --queue=high,default
627. Bus lệnh của Laravel là một thành phần cấp thấp hơn mà việc gửi công việc theo hàng đợi được xây dựng dựa trênphp artisan queue:work --queue=high,default
04Ngoài việc xâu chuỗi các thể hiện của lớp công việc, bạn cũng có thể xâu chuỗi các lần đóng
php artisan queue:work --queue=high,default
05Cảnh báo
Xóa công việc bằng cách sử dụng phương pháp628 trong công việc sẽ không ngăn các công việc chuỗi được xử lý. Chuỗi sẽ chỉ dừng thực thi nếu một công việc trong chuỗi bị lỗi.
php artisan queue:work --queue=high,default
Chuỗi kết nối & hàng đợi
Nếu bạn muốn chỉ định kết nối và hàng đợi sẽ được sử dụng cho các công việc được xâu chuỗi, bạn có thể sử dụng các phương thức
php artisan queue:work --queue=high,default
629 và php artisan queue:work --queue=high,default
630. Các phương thức này chỉ định kết nối hàng đợi và tên hàng đợi sẽ được sử dụng trừ khi công việc được xếp hàng đợi được chỉ định rõ ràng cho một kết nối/hàng đợi khácphp artisan queue:work --queue=high,default
06Thất bại chuỗi
Khi xâu chuỗi các công việc, bạn có thể sử dụng phương pháp
php artisan queue:work --queue=high,default
631 để chỉ định một lần đóng sẽ được gọi nếu một công việc trong chuỗi không thành công. Cuộc gọi lại đã cho sẽ nhận được phiên bản php artisan queue:work --queue=high,default
632 gây ra lỗi công việcphp artisan queue:work --queue=high,default
07{note} Vì các cuộc gọi lại chuỗi được sắp xếp theo thứ tự và được thực thi sau đó bởi hàng đợi của Laravel, bạn không nên sử dụng biến
633 trong các cuộc gọi lại chuỗi
php artisan queue:work --queue=high,default
Tùy chỉnh hàng đợi & kết nối
Gửi đến một hàng đợi cụ thể
Bằng cách đẩy các công việc vào các hàng đợi khác nhau, bạn có thể "phân loại" các công việc được xếp hàng đợi của mình và thậm chí ưu tiên số lượng công nhân mà bạn chỉ định cho các hàng đợi khác nhau. Hãy nhớ rằng, điều này không đẩy các công việc đến các "kết nối" hàng đợi khác nhau như được xác định bởi tệp cấu hình hàng đợi của bạn, mà chỉ đẩy các hàng đợi cụ thể trong một kết nối duy nhất. Để chỉ định hàng đợi, hãy sử dụng phương pháp
php artisan queue:work --queue=high,default
630 khi gửi công việcphp artisan queue:work --queue=high,default
08Ngoài ra, bạn có thể chỉ định hàng đợi của công việc bằng cách gọi phương thức
php artisan queue:work --queue=high,default
630 trong hàm tạo của công việcphp artisan queue:work --queue=high,default
09Gửi đến một kết nối cụ thể
Nếu ứng dụng của bạn tương tác với nhiều kết nối hàng đợi, bạn có thể chỉ định kết nối nào sẽ đẩy công việc tới bằng cách sử dụng phương thức
php artisan queue:work --queue=high,default
629php artisan queue:work --queue=high,default
30Bạn có thể xâu chuỗi các phương thức
php artisan queue:work --queue=high,default
629 và php artisan queue:work --queue=high,default
630 lại với nhau để chỉ định kết nối và hàng đợi cho một công việcphp artisan queue:work --queue=high,default
31Ngoài ra, bạn có thể chỉ định kết nối của công việc bằng cách gọi phương thức
php artisan queue:work --queue=high,default
629 trong hàm tạo của công việcphp artisan queue:work --queue=high,default
32Chỉ định số lần thử công việc tối đa/giá trị thời gian chờ
Số lần thử tối đa
Nếu một trong các công việc được xếp hàng đợi của bạn gặp lỗi, bạn có thể không muốn công việc đó tiếp tục thử lại vô thời hạn. Do đó, Laravel cung cấp nhiều cách khác nhau để chỉ định số lần hoặc khoảng thời gian một công việc có thể được thực hiện
Một cách tiếp cận để chỉ định số lần tối đa một công việc có thể được thực hiện là thông qua công tắc
php artisan queue:work --queue=high,default
640 trên dòng lệnh Artisan. Điều này sẽ áp dụng cho tất cả các công việc được nhân viên xử lý trừ khi công việc đang được xử lý chỉ định số lần cụ thể hơn công việc đó có thể được thực hiệnphp artisan queue:work --queue=high,default
33Nếu một công việc vượt quá số lần thử tối đa, nó sẽ được coi là một công việc "thất bại". Để biết thêm thông tin về cách xử lý các công việc thất bại, hãy tham khảo tài liệu về công việc thất bại
Bạn có thể thực hiện một cách tiếp cận chi tiết hơn bằng cách xác định số lần tối đa một công việc có thể được thực hiện trên chính lớp công việc đó. Nếu số lần thử tối đa được chỉ định trong công việc, nó sẽ được ưu tiên hơn giá trị
php artisan queue:work --queue=high,default
640 được cung cấp trên dòng lệnhphp artisan queue:work --queue=high,default
34Nỗ lực dựa trên thời gian
Là một cách thay thế cho việc xác định số lần một công việc có thể được thử trước khi thất bại, bạn có thể xác định thời điểm mà công việc đó không còn được thử nữa. Điều này cho phép một công việc được thực hiện nhiều lần trong một khung thời gian nhất định. Để xác định thời gian không nên cố gắng thực hiện một công việc nữa, hãy thêm phương thức
php artisan queue:work --queue=high,default
79 vào lớp công việc của bạn. Phương thức này sẽ trả về một phiên bản php artisan queue:work --queue=high,default
643php artisan queue:work --queue=high,default
35Lưu ý
Bạn cũng có thể xác định thuộc tính77 hoặc phương thức
php artisan queue:work --queue=high,default
79 trên trình xử lý sự kiện được xếp hàng đợi của mình.
php artisan queue:work --queue=high,default
Ngoại lệ tối đa
Đôi khi, bạn có thể muốn chỉ định rằng một công việc có thể được thử nhiều lần, nhưng sẽ không thành công nếu các lần thử lại được kích hoạt bởi một số ngoại lệ nhất định chưa được xử lý [trái ngược với việc được giải phóng trực tiếp bằng phương pháp
php artisan queue:work --queue=high,default
646]. Để thực hiện điều này, bạn có thể xác định thuộc tính php artisan queue:work --queue=high,default
78 trên lớp công việc của mìnhphp artisan queue:work --queue=high,default
36Trong ví dụ này, công việc sẽ được giải phóng trong mười giây nếu ứng dụng không thể nhận được khóa Redis và sẽ tiếp tục được thử lại tối đa 25 lần. Tuy nhiên, công việc sẽ thất bại nếu công việc đưa ra ba ngoại lệ chưa được xử lý
Hết giờ
Cảnh báo
Phải cài đặt tiện ích mở rộng PHP648 để chỉ định thời gian chờ của công việc.
php artisan queue:work --queue=high,default
Thông thường, bạn biết khoảng thời gian bạn mong đợi các công việc được xếp hàng chờ của mình. Vì lý do này, Laravel cho phép bạn chỉ định giá trị "thời gian chờ". Theo mặc định, giá trị thời gian chờ là 60 giây. Nếu một công việc đang xử lý lâu hơn số giây được chỉ định bởi giá trị thời gian chờ, nhân viên đang xử lý công việc sẽ thoát với một lỗi. Thông thường, worker sẽ được khởi động lại tự động bởi trình quản lý quy trình được định cấu hình trên máy chủ của bạn
Số giây tối đa mà công việc có thể chạy có thể được chỉ định bằng cách sử dụng công tắc
php artisan queue:work --queue=high,default
649 trên dòng lệnh Artisanphp artisan queue:work --queue=high,default
37Nếu công việc vượt quá nỗ lực tối đa của nó bằng cách liên tục hết thời gian, nó sẽ được đánh dấu là không thành công
Bạn cũng có thể xác định số giây tối đa mà một công việc sẽ được phép chạy trên chính lớp công việc đó. Nếu thời gian chờ được chỉ định trong công việc, nó sẽ được ưu tiên hơn bất kỳ thời gian chờ nào được chỉ định trên dòng lệnh
php artisan queue:work --queue=high,default
38Đôi khi, các quy trình chặn IO chẳng hạn như ổ cắm hoặc kết nối HTTP gửi đi có thể không tôn trọng thời gian chờ đã chỉ định của bạn. Do đó, khi sử dụng các tính năng này, bạn cũng phải luôn cố gắng chỉ định thời gian chờ bằng cách sử dụng API của chúng. Ví dụ: khi sử dụng Guzzle, bạn phải luôn chỉ định giá trị thời gian chờ kết nối và yêu cầu
Không thành công khi hết thời gian chờ
Nếu bạn muốn chỉ ra rằng một công việc sẽ được đánh dấu là thất bại khi hết thời gian chờ, bạn có thể xác định thuộc tính
php artisan queue:work --queue=high,default
650 trên lớp công việcphp artisan queue:work --queue=high,default
39Xử lý lỗi
Nếu một ngoại lệ được đưa ra trong khi công việc đang được xử lý, công việc sẽ tự động được giải phóng trở lại hàng đợi để có thể thử lại. Công việc sẽ tiếp tục được giải phóng cho đến khi nó được thử với số lần tối đa mà ứng dụng của bạn cho phép. Số lần thử tối đa được xác định bởi công tắc
php artisan queue:work --queue=high,default
640 được sử dụng trên lệnh Artisan php artisan queue:work --queue=high,default
652. Ngoài ra, số lần thử tối đa có thể được xác định trên chính lớp công việc. Thông tin thêm về cách chạy queue worker có thể được tìm thấy bên dướiGiải phóng công việc theo cách thủ công
Đôi khi, bạn có thể muốn giải phóng thủ công một công việc trở lại hàng đợi để có thể thử lại công việc đó sau đó. Bạn có thể thực hiện việc này bằng cách gọi phương thức
php artisan queue:work --queue=high,default
646Theo mặc định, phương thức
php artisan queue:work --queue=high,default
646 sẽ giải phóng công việc trở lại hàng đợi để xử lý ngay lập tức. Tuy nhiên, bằng cách chuyển một số nguyên cho phương thức php artisan queue:work --queue=high,default
646, bạn có thể ra lệnh cho hàng đợi không cung cấp công việc để xử lý cho đến khi hết một số giây nhất địnhThất bại một công việc theo cách thủ công
Đôi khi, bạn có thể cần đánh dấu thủ công một công việc là "thất bại". Để làm như vậy, bạn có thể gọi phương thức
php artisan queue:work --queue=high,default
656Nếu bạn muốn đánh dấu công việc của mình là thất bại vì một ngoại lệ mà bạn đã bắt gặp, bạn có thể chuyển ngoại lệ đó cho phương thức
php artisan queue:work --queue=high,default
656Lưu ý
Để biết thêm thông tin về các lệnh in không thành công, hãy xem tài liệu về cách xử lý các lệnh in không thành công.
Nhóm công việc
Tính năng chia lô công việc của Laravel cho phép bạn dễ dàng thực hiện một loạt công việc và sau đó thực hiện một số hành động khi lô công việc đã thực hiện xong. Trước khi bắt đầu, bạn nên tạo một quá trình di chuyển cơ sở dữ liệu để tạo một bảng chứa thông tin meta về các lô công việc của bạn, chẳng hạn như tỷ lệ phần trăm hoàn thành của chúng. Quá trình di chuyển này có thể được tạo bằng lệnh Artisan
php artisan queue:work --queue=high,default
658php artisan queue:work --queue=high,default
40Xác định công việc Batchable
Để xác định một công việc có thể xếp hàng loạt, bạn nên tạo một công việc có thể xếp hàng đợi như bình thường; . Đặc điểm này cung cấp quyền truy cập vào một phương thức
php artisan queue:work --queue=high,default
660 có thể được sử dụng để truy xuất lô hiện tại mà công việc đang thực thi bên trongphp artisan queue:work --queue=high,default
41gửi hàng loạt
Để gửi một lô công việc, bạn nên sử dụng phương pháp
php artisan queue:work --queue=high,default
660 của mặt tiền php artisan queue:work --queue=high,default
627. Tất nhiên, theo đợt chủ yếu hữu ích khi được kết hợp với các cuộc gọi lại hoàn thành. Vì vậy, bạn có thể sử dụng các phương pháp php artisan queue:work --queue=high,default
663, php artisan queue:work --queue=high,default
631 và php artisan queue:work --queue=high,default
665 để xác định các cuộc gọi lại hoàn thành cho lô. Mỗi cuộc gọi lại này sẽ nhận được một phiên bản php artisan queue:work --queue=high,default
666 khi chúng được gọi. Trong ví dụ này, chúng tôi sẽ tưởng tượng rằng chúng tôi đang xếp hàng một loạt công việc mà mỗi công việc xử lý một số hàng nhất định từ tệp CSVphp artisan queue:work --queue=high,default
42ID của lô, có thể được truy cập thông qua thuộc tính
php artisan queue:work --queue=high,default
667, có thể được sử dụng để truy vấn bus lệnh Laravel để biết thông tin về lô sau khi nó được gửi điCảnh báo
Vì các cuộc gọi lại hàng loạt được sắp xếp theo thứ tự và được thực hiện sau đó bởi hàng đợi Laravel, bạn không nên sử dụng biến633 trong các cuộc gọi lại.
php artisan queue:work --queue=high,default
đặt tên lô
Một số công cụ như Laravel Horizon và Laravel Telescope có thể cung cấp thông tin gỡ lỗi thân thiện với người dùng hơn cho các đợt nếu các đợt được đặt tên. Để gán tên tùy ý cho một lô, bạn có thể gọi phương thức
php artisan queue:work --queue=high,default
669 trong khi xác định lôphp artisan queue:work --queue=high,default
43Hàng loạt kết nối & hàng đợi
Nếu bạn muốn chỉ định kết nối và hàng đợi sẽ được sử dụng cho các công việc theo lô, bạn có thể sử dụng các phương thức
php artisan queue:work --queue=high,default
629 và php artisan queue:work --queue=high,default
630. Tất cả các công việc theo đợt phải thực thi trong cùng một kết nối và hàng đợiphp artisan queue:work --queue=high,default
44Chuỗi trong lô
Bạn có thể xác định một tập hợp các công việc được xâu chuỗi trong một đợt bằng cách đặt các công việc được xâu chuỗi trong một mảng. Ví dụ: chúng tôi có thể thực thi song song hai chuỗi công việc và thực hiện gọi lại khi cả hai chuỗi công việc đã xử lý xong
php artisan queue:work --queue=high,default
45Thêm công việc vào hàng loạt
Đôi khi có thể hữu ích khi thêm các công việc bổ sung vào một đợt từ bên trong một công việc theo đợt. Mẫu này có thể hữu ích khi bạn cần xử lý hàng nghìn công việc có thể mất quá nhiều thời gian để gửi đi trong một yêu cầu web. Vì vậy, thay vào đó, bạn có thể muốn gửi một loạt công việc "bộ nạp" ban đầu để bổ sung thêm nhiều công việc cho lô đó.
php artisan queue:work --queue=high,default
46Trong ví dụ này, chúng tôi sẽ sử dụng công việc
php artisan queue:work --queue=high,default
672 để hydrat hóa lô với các công việc bổ sung. Để thực hiện điều này, chúng tôi có thể sử dụng phương pháp php artisan queue:work --queue=high,default
673 trên phiên bản lô có thể được truy cập thông qua phương pháp php artisan queue:work --queue=high,default
660 của công việcphp artisan queue:work --queue=high,default
47Cảnh báo
Bạn chỉ có thể thêm công việc vào một lô từ bên trong công việc thuộc cùng một lô.
Kiểm tra lô hàng
Phiên bản
php artisan queue:work --queue=high,default
666 được cung cấp cho lệnh gọi lại hoàn thành hàng loạt có nhiều thuộc tính và phương thức khác nhau để hỗ trợ bạn tương tác và kiểm tra một loạt công việc nhất địnhphp artisan queue:work --queue=high,default
48Trả lại hàng loạt từ các tuyến đường
Tất cả các phiên bản
php artisan queue:work --queue=high,default
666 đều có thể tuần tự hóa JSON, nghĩa là bạn có thể trả lại chúng trực tiếp từ một trong các tuyến của ứng dụng để truy xuất tải trọng JSON chứa thông tin về lô, bao gồm cả tiến trình hoàn thành của nó. Điều này giúp hiển thị thông tin về tiến độ hoàn thành của lô trong giao diện người dùng của ứng dụng của bạn một cách thuận tiệnĐể truy xuất một lô theo ID của nó, bạn có thể sử dụng phương thức
php artisan queue:work --queue=high,default
678 của mặt tiền php artisan queue:work --queue=high,default
627php artisan queue:work --queue=high,default
49Hủy hàng loạt
Đôi khi bạn có thể cần hủy thực thi một đợt nhất định. Điều này có thể được thực hiện bằng cách gọi phương thức
php artisan queue:work --queue=high,default
679 trên đối tượng php artisan queue:work --queue=high,default
666php artisan queue:work --queue=high,default
70Như bạn có thể nhận thấy trong các ví dụ trước, các công việc theo lô thường phải kiểm tra xem liệu lô đó có bị hủy khi bắt đầu phương thức
php artisan queue:work --queue=high,default
33 của chúng khôngphp artisan queue:work --queue=high,default
71Lỗi hàng loạt
Khi một công việc theo lô không thành công, cuộc gọi lại
php artisan queue:work --queue=high,default
631 [nếu được chỉ định] sẽ được gọi. Cuộc gọi lại này chỉ được gọi cho công việc đầu tiên không thành công trong đợtCho phép thất bại
Khi một công việc trong một lô không thành công, Laravel sẽ tự động đánh dấu lô đó là "đã hủy". Nếu muốn, bạn có thể tắt hành vi này để lỗi công việc không tự động đánh dấu lô là đã hủy. Điều này có thể được thực hiện bằng cách gọi phương thức
php artisan queue:work --queue=high,default
683 trong khi gửi lôphp artisan queue:work --queue=high,default
72Thử lại hàng loạt công việc thất bại
Để thuận tiện, Laravel cung cấp lệnh
php artisan queue:work --queue=high,default
684 Artisan cho phép bạn dễ dàng thử lại tất cả các công việc không thành công cho một đợt nhất định. Lệnh php artisan queue:work --queue=high,default
684 chấp nhận UUID của lô có công việc không thành công sẽ được thử lạiphp artisan queue:work --queue=high,default
73cắt tỉa hàng loạt
Không cắt tỉa, bảng
php artisan queue:work --queue=high,default
686 có thể tích lũy các bản ghi rất nhanh. Để giảm thiểu điều này, bạn nên lên lịch cho lệnh Artisan php artisan queue:work --queue=high,default
687 chạy hàng ngàyphp artisan queue:work --queue=high,default
74Theo mặc định, tất cả các lô đã hoàn thành hơn 24 giờ sẽ bị cắt bớt. Bạn có thể sử dụng tùy chọn
php artisan queue:work --queue=high,default
688 khi gọi lệnh để xác định thời gian lưu giữ dữ liệu lô. Ví dụ: lệnh sau sẽ xóa tất cả các lô đã hoàn thành hơn 48 giờ trướcphp artisan queue:work --queue=high,default
75Đôi khi, bảng
php artisan queue:work --queue=high,default
689 của bạn có thể tích lũy các bản ghi lô cho các lô không bao giờ hoàn thành thành công, chẳng hạn như các lô có công việc không thành công và công việc đó không bao giờ được thử lại thành công. Bạn có thể hướng dẫn lệnh php artisan queue:work --queue=high,default
687 để cắt bớt các bản ghi lô chưa hoàn thành này bằng cách sử dụng tùy chọn php artisan queue:work --queue=high,default
691php artisan queue:work --queue=high,default
76Tương tự như vậy, bảng
php artisan queue:work --queue=high,default
689 của bạn cũng có thể tích lũy các bản ghi lô cho các lô bị hủy. Bạn có thể hướng dẫn lệnh php artisan queue:work --queue=high,default
687 để cắt bớt các bản ghi lô bị hủy này bằng cách sử dụng tùy chọn php artisan queue:work --queue=high,default
694php artisan queue:work --queue=high,default
77Xếp hàng đóng cửa
Thay vì gửi một lớp công việc vào hàng đợi, bạn cũng có thể gửi một bao đóng. Điều này rất tốt cho các tác vụ đơn giản, nhanh chóng cần được thực hiện ngoài chu kỳ yêu cầu hiện tại. Khi gửi các bao đóng vào hàng đợi, nội dung mã của bao đóng được ký bằng mật mã để không thể sửa đổi nó trong quá trình vận chuyển
php artisan queue:work --queue=high,default
78Sử dụng phương pháp
php artisan queue:work --queue=high,default
631, bạn có thể cung cấp một lần đóng sẽ được thực thi nếu lần đóng hàng đợi không hoàn thành thành công sau khi sử dụng hết tất cả các lần thử lại được định cấu hình của hàng đợi của bạnphp artisan queue:work --queue=high,default
79{note} Vì các cuộc gọi lại của
631 được sắp xếp theo thứ tự và được thực hiện sau đó bởi hàng đợi của Laravel, bạn không nên sử dụng biến
php artisan queue:work --queue=high,default
633 trong các cuộc gọi lại của
php artisan queue:work --queue=high,default
631
php artisan queue:work --queue=high,default
Chạy công nhân xếp hàng
Lệnh php artisan queue:work --queue=high,default
652
php artisan queue:work --queue=high,default
Laravel bao gồm một lệnh Artisan sẽ bắt đầu một nhân viên xếp hàng và xử lý các công việc mới khi chúng được đẩy vào hàng đợi. Bạn có thể chạy worker bằng lệnh
php artisan queue:work --queue=high,default
652 Artisan. Lưu ý rằng một khi lệnh php artisan queue:work --queue=high,default
652 đã bắt đầu, nó sẽ tiếp tục chạy cho đến khi bị dừng thủ công hoặc bạn đóng thiết bị đầu cuối của mìnhLưu ý
Để giữ cho quy trình652 chạy vĩnh viễn trong nền, bạn nên sử dụng trình giám sát quy trình, chẳng hạn như Người giám sát để đảm bảo rằng nhân viên xếp hàng không ngừng chạy.
php artisan queue:work --queue=high,default
Bạn có thể bao gồm cờ
php artisan queue:work --queue=high,default
003 khi gọi lệnh php artisan queue:work --queue=high,default
652 nếu bạn muốn ID công việc đã xử lý được bao gồm trong đầu ra của lệnhHãy nhớ rằng, nhân viên xếp hàng là các quy trình tồn tại lâu dài và lưu trữ trạng thái ứng dụng đã khởi động trong bộ nhớ. Do đó, họ sẽ không nhận thấy những thay đổi trong cơ sở mã của bạn sau khi chúng được bắt đầu. Vì vậy, trong quá trình triển khai của bạn, hãy đảm bảo khởi động lại công nhân xếp hàng của bạn. Ngoài ra, hãy nhớ rằng bất kỳ trạng thái tĩnh nào do ứng dụng của bạn tạo hoặc sửa đổi sẽ không được tự động đặt lại giữa các công việc
Ngoài ra, bạn có thể chạy lệnh
php artisan queue:work --queue=high,default
005. Khi sử dụng lệnh php artisan queue:work --queue=high,default
005, bạn không phải khởi động lại worker theo cách thủ công khi muốn tải lại mã đã cập nhật hoặc đặt lại trạng thái ứng dụng; Chạy nhiều nhân viên xếp hàng
Để chỉ định nhiều công nhân vào một hàng đợi và xử lý các công việc đồng thời, bạn chỉ cần bắt đầu nhiều quy trình
php artisan queue:work --queue=high,default
652. Điều này có thể được thực hiện cục bộ thông qua nhiều tab trong thiết bị đầu cuối của bạn hoặc trong sản xuất bằng cách sử dụng cài đặt cấu hình của trình quản lý quy trình của bạn. Khi sử dụng Trình giám sát, bạn có thể sử dụng giá trị cấu hình php artisan queue:work --queue=high,default
009Chỉ định Kết nối & Hàng đợi
Bạn cũng có thể chỉ định kết nối hàng đợi nào mà nhân viên sẽ sử dụng. Tên kết nối được truyền cho lệnh
php artisan queue:work --queue=high,default
010 phải tương ứng với một trong các kết nối được xác định trong tệp cấu hình php artisan queue:work --queue=high,default
05 của bạnphp artisan queue:work --queue=high,default
50Theo mặc định, lệnh
php artisan queue:work --queue=high,default
652 chỉ xử lý các công việc cho hàng đợi mặc định trên một kết nối nhất định. Tuy nhiên, bạn có thể tùy chỉnh trình xử lý hàng đợi của mình hơn nữa bằng cách chỉ xử lý các hàng đợi cụ thể cho một kết nối nhất định. Ví dụ: nếu tất cả email của bạn được xử lý trong hàng đợi php artisan queue:work --queue=high,default
013 trên kết nối hàng đợi php artisan queue:work --queue=high,default
19 của bạn, bạn có thể đưa ra lệnh sau để bắt đầu một nhân viên chỉ xử lý hàng đợi đóphp artisan queue:work --queue=high,default
51Xử lý một số lượng công việc được chỉ định
Tùy chọn
php artisan queue:work --queue=high,default
015 có thể được sử dụng để hướng dẫn nhân viên chỉ xử lý một công việc duy nhất từ hàng đợiphp artisan queue:work --queue=high,default
52Tùy chọn
php artisan queue:work --queue=high,default
016 có thể được sử dụng để hướng dẫn nhân viên xử lý số lượng công việc đã cho và sau đó thoát. Tùy chọn này có thể hữu ích khi được kết hợp với Người giám sát để nhân viên của bạn tự động khởi động lại sau khi xử lý một số công việc nhất định, giải phóng mọi bộ nhớ mà họ có thể đã tích lũyphp artisan queue:work --queue=high,default
53Xử lý tất cả các công việc được xếp hàng và sau đó thoát
Tùy chọn
php artisan queue:work --queue=high,default
017 có thể được sử dụng để hướng dẫn nhân viên xử lý tất cả các công việc và sau đó thoát ra một cách nhẹ nhàng. Tùy chọn này có thể hữu ích khi xử lý hàng đợi Laravel trong bộ chứa Docker nếu bạn muốn tắt bộ chứa sau khi hàng đợi trốngphp artisan queue:work --queue=high,default
54Xử lý công việc trong một số giây nhất định
Tùy chọn
php artisan queue:work --queue=high,default
018 có thể được sử dụng để hướng dẫn nhân viên xử lý công việc trong số giây nhất định rồi thoát. Tùy chọn này có thể hữu ích khi được kết hợp với Người giám sát để nhân viên của bạn tự động khởi động lại sau khi xử lý công việc trong một khoảng thời gian nhất định, giải phóng mọi bộ nhớ mà họ có thể đã tích lũyphp artisan queue:work --queue=high,default
55Thời gian ngủ của công nhân
Khi các công việc có sẵn trên hàng đợi, worker sẽ tiếp tục xử lý các công việc mà không có độ trễ giữa các công việc đó. Tuy nhiên, tùy chọn
php artisan queue:work --queue=high,default
019 xác định công nhân sẽ "ngủ" trong bao nhiêu giây nếu không có công việc mới nào. Trong khi ngủ, worker sẽ không xử lý bất kỳ công việc mới nào - các công việc sẽ được xử lý sau khi worker thức dậy lần nữaphp artisan queue:work --queue=high,default
56Cân nhắc tài nguyên
Daemon queue worker không "khởi động lại" khung trước khi xử lý từng công việc. Do đó, bạn nên giải phóng mọi tài nguyên nặng sau mỗi công việc hoàn thành. Ví dụ: nếu bạn đang xử lý hình ảnh với thư viện GD, bạn nên giải phóng bộ nhớ bằng
php artisan queue:work --queue=high,default
020 khi xử lý xong hình ảnhƯu tiên hàng đợi
Đôi khi bạn có thể muốn ưu tiên cách hàng đợi của mình được xử lý. Ví dụ: trong tệp cấu hình
php artisan queue:work --queue=high,default
05 của bạn, bạn có thể đặt php artisan queue:work --queue=high,default
09 mặc định cho kết nối php artisan queue:work --queue=high,default
19 của mình thành php artisan queue:work --queue=high,default
024. Tuy nhiên, đôi khi bạn có thể muốn đẩy một công việc vào hàng đợi ưu tiên php artisan queue:work --queue=high,default
12 như vậyphp artisan queue:work --queue=high,default
57Để bắt đầu một worker xác minh rằng tất cả các công việc trong hàng đợi của
php artisan queue:work --queue=high,default
12 đã được xử lý trước khi tiếp tục với bất kỳ công việc nào trên hàng đợi của php artisan queue:work --queue=high,default
024, hãy chuyển một danh sách các tên hàng đợi được phân tách bằng dấu phẩy cho lệnh php artisan queue:work --queue=high,default
010php artisan queue:work --queue=high,default
58Công nhân xếp hàng & triển khai
Vì trình xử lý hàng đợi là các quy trình tồn tại lâu dài, chúng sẽ không nhận thấy các thay đổi đối với mã của bạn mà không được khởi động lại. Vì vậy, cách đơn giản nhất để triển khai một ứng dụng bằng queue worker là khởi động lại các worker trong quá trình triển khai của bạn. Bạn có thể khởi động lại tất cả các công nhân một cách duyên dáng bằng cách đưa ra lệnh
php artisan queue:work --queue=high,default
029Lệnh này sẽ hướng dẫn tất cả nhân viên xếp hàng thoát ra một cách nhẹ nhàng sau khi họ xử lý xong công việc hiện tại của mình để không có công việc hiện có nào bị mất. Vì nhân viên xếp hàng sẽ thoát khi lệnh
php artisan queue:work --queue=high,default
029 được thực thi, bạn nên chạy trình quản lý quy trình, chẳng hạn như Người giám sát để tự động khởi động lại nhân viên xếp hàngLưu ý
Hàng đợi sử dụng bộ đệm để lưu trữ tín hiệu khởi động lại, vì vậy bạn nên xác minh rằng trình điều khiển bộ đệm được định cấu hình đúng cho ứng dụng của bạn trước khi sử dụng tính năng này.
Hết hạn Công việc & Thời gian chờ
hết hạn công việc
Trong tệp cấu hình
php artisan queue:work --queue=high,default
05 của bạn, mỗi kết nối hàng đợi xác định một tùy chọn php artisan queue:work --queue=high,default
032. Tùy chọn này chỉ định số giây kết nối hàng đợi sẽ đợi trước khi thử lại một công việc đang được xử lý. Ví dụ: nếu giá trị của php artisan queue:work --queue=high,default
032 được đặt thành php artisan queue:work --queue=high,default
034, công việc sẽ được giải phóng trở lại hàng đợi nếu nó đã được xử lý trong 90 giây mà không được giải phóng hoặc bị xóa. Thông thường, bạn nên đặt giá trị php artisan queue:work --queue=high,default
032 thành số giây tối đa mà công việc của bạn cần một cách hợp lý để hoàn tất quá trình xử lýCảnh báo
Kết nối hàng đợi duy nhất không chứa giá trị032 là Amazon SQS. SQS sẽ thử lại công việc dựa trên Thời gian chờ hiển thị mặc định được quản lý trong bảng điều khiển AWS.
php artisan queue:work --queue=high,default
Thời gian chờ của công nhân
Lệnh
php artisan queue:work --queue=high,default
652 Artisan hiển thị tùy chọn php artisan queue:work --queue=high,default
649. Theo mặc định, giá trị php artisan queue:work --queue=high,default
649 là 60 giây. Nếu một công việc đang xử lý lâu hơn số giây được chỉ định bởi giá trị thời gian chờ, nhân viên đang xử lý công việc sẽ thoát với một lỗi. Thông thường, worker sẽ được khởi động lại tự động bởi trình quản lý quy trình được định cấu hình trên máy chủ của bạnphp artisan queue:work --queue=high,default
59Tùy chọn cấu hình
php artisan queue:work --queue=high,default
032 và tùy chọn php artisan queue:work --queue=high,default
649 CLI khác nhau, nhưng hoạt động cùng nhau để đảm bảo rằng các công việc không bị mất và các công việc chỉ được xử lý thành công một lầnCảnh báo
Giá trị649 phải luôn ngắn hơn giá trị cấu hình
php artisan queue:work --queue=high,default
032 của bạn ít nhất vài giây. Điều này sẽ đảm bảo rằng công nhân đang xử lý công việc bị đóng băng luôn bị chấm dứt trước khi công việc được thử lại. Nếu tùy chọn
php artisan queue:work --queue=high,default
649 của bạn dài hơn giá trị cấu hình
php artisan queue:work --queue=high,default
032, công việc của bạn có thể được xử lý hai lần.
php artisan queue:work --queue=high,default
Cấu hình giám sát
Trong quá trình sản xuất, bạn cần một cách để duy trì hoạt động của quy trình
php artisan queue:work --queue=high,default
652. Một quy trình php artisan queue:work --queue=high,default
652 có thể ngừng chạy vì nhiều lý do, chẳng hạn như thời gian chờ của công nhân vượt quá hoặc thực thi lệnh php artisan queue:work --queue=high,default
029Vì lý do này, bạn cần định cấu hình trình giám sát quy trình có thể phát hiện khi quy trình
php artisan queue:work --queue=high,default
652 của bạn thoát và tự động khởi động lại chúng. Ngoài ra, trình giám sát quy trình có thể cho phép bạn chỉ định số lượng quy trình php artisan queue:work --queue=high,default
652 mà bạn muốn chạy đồng thời. Trình giám sát là trình giám sát quy trình thường được sử dụng trong môi trường Linux và chúng tôi sẽ thảo luận về cách định cấu hình nó trong tài liệu sauGiám sát cài đặt
Người giám sát là người giám sát quy trình cho hệ điều hành Linux và sẽ tự động khởi động lại quy trình
php artisan queue:work --queue=high,default
652 của bạn nếu chúng không thành công. Để cài đặt Trình giám sát trên Ubuntu, bạn có thể sử dụng lệnh sauphp artisan queue:work --queue=high,default
90Lưu ý
Nếu việc tự định cấu hình và quản lý Người giám sát nghe có vẻ quá sức, hãy cân nhắc sử dụng Laravel Forge, công cụ này sẽ tự động cài đặt và định cấu hình Người giám sát cho các dự án Laravel sản xuất của bạn.
Cấu hình giám sát viên
Các tệp cấu hình giám sát thường được lưu trữ trong thư mục
php artisan queue:work --queue=high,default
052. Trong thư mục này, bạn có thể tạo bất kỳ số lượng tệp cấu hình nào hướng dẫn người giám sát cách giám sát các quy trình của bạn. Ví dụ: hãy tạo một tệp php artisan queue:work --queue=high,default
053 bắt đầu và theo dõi các quy trình của php artisan queue:work --queue=high,default
652php artisan queue:work --queue=high,default
91Trong ví dụ này, chỉ thị
php artisan queue:work --queue=high,default
009 sẽ hướng dẫn Người giám sát chạy tám quy trình php artisan queue:work --queue=high,default
652 và giám sát tất cả chúng, tự động khởi động lại chúng nếu chúng không thành công. Bạn nên thay đổi chỉ thị php artisan queue:work --queue=high,default
057 của cấu hình để phản ánh các tùy chọn công nhân và kết nối hàng đợi mong muốn của bạnCảnh báo
Bạn nên đảm bảo rằng giá trị của058 lớn hơn số giây mà công việc chạy lâu nhất của bạn sử dụng. Nếu không, Người giám sát có thể hủy công việc trước khi xử lý xong.
php artisan queue:work --queue=high,default
Người giám sát bắt đầu
Khi tệp cấu hình đã được tạo, bạn có thể cập nhật cấu hình Người giám sát và bắt đầu các quy trình bằng cách sử dụng các lệnh sau
php artisan queue:work --queue=high,default
92Để biết thêm thông tin về Người giám sát, hãy tham khảo tài liệu Người giám sát
Xử lý công việc thất bại
Đôi khi công việc xếp hàng đợi của bạn sẽ thất bại. Đừng lo lắng, không phải lúc nào mọi thứ cũng diễn ra theo kế hoạch. Laravel bao gồm một cách thuận tiện để chỉ định số lần tối đa một công việc nên được thực hiện. Sau khi một công việc không đồng bộ vượt quá số lần thử này, nó sẽ được chèn vào bảng cơ sở dữ liệu
php artisan queue:work --queue=high,default
059. Các công việc được gửi đi đồng bộ không thành công sẽ không được lưu trữ trong bảng này và các ngoại lệ của chúng sẽ được ứng dụng xử lý ngay lập tứcDi chuyển để tạo bảng
php artisan queue:work --queue=high,default
059 thường đã có sẵn trong các ứng dụng Laravel mới. Tuy nhiên, nếu ứng dụng của bạn không chứa di chuyển cho bảng này, bạn có thể sử dụng lệnh php artisan queue:work --queue=high,default
061 để tạo di chuyểnphp artisan queue:work --queue=high,default
93Khi chạy một quy trình nhân viên xếp hàng, bạn có thể chỉ định số lần tối đa một công việc sẽ được thử bằng cách sử dụng công tắc
php artisan queue:work --queue=high,default
640 trên lệnh php artisan queue:work --queue=high,default
652. Nếu bạn không chỉ định giá trị cho tùy chọn php artisan queue:work --queue=high,default
640, các công việc sẽ chỉ được thực hiện một lần hoặc nhiều lần như được chỉ định bởi thuộc tính php artisan queue:work --queue=high,default
065 của loại công việcphp artisan queue:work --queue=high,default
94Sử dụng tùy chọn
php artisan queue:work --queue=high,default
066, bạn có thể chỉ định số giây mà Laravel sẽ đợi trước khi thử lại một công việc gặp phải ngoại lệ. Theo mặc định, một công việc ngay lập tức được giải phóng trở lại hàng đợi để có thể thử lạiphp artisan queue:work --queue=high,default
95Nếu bạn muốn định cấu hình số giây mà Laravel nên đợi trước khi thử lại một công việc gặp phải ngoại lệ trên cơ sở từng công việc, bạn có thể làm như vậy bằng cách xác định thuộc tính
php artisan queue:work --queue=high,default
601 trên lớp công việc của mìnhphp artisan queue:work --queue=high,default
96Nếu bạn yêu cầu logic phức tạp hơn để xác định thời gian lùi của công việc, bạn có thể xác định phương thức
php artisan queue:work --queue=high,default
601 trên lớp công việc của mìnhphp artisan queue:work --queue=high,default
97Bạn có thể dễ dàng định cấu hình dự phòng "theo cấp số nhân" bằng cách trả về một mảng các giá trị dự phòng từ phương thức
php artisan queue:work --queue=high,default
601. Trong ví dụ này, độ trễ thử lại sẽ là 1 giây cho lần thử lại đầu tiên, 5 giây cho lần thử lại thứ hai và 10 giây cho lần thử lại thứ baphp artisan queue:work --queue=high,default
97Dọn dẹp Sau khi Công việc Thất bại
Khi một công việc cụ thể không thành công, bạn có thể muốn gửi cảnh báo cho người dùng của mình hoặc hoàn nguyên bất kỳ hành động nào đã được hoàn thành một phần bởi công việc. Để thực hiện điều này, bạn có thể định nghĩa một phương thức
php artisan queue:work --queue=high,default
070 trên lớp công việc của mình. Phiên bản php artisan queue:work --queue=high,default
632 khiến công việc thất bại sẽ được chuyển sang phương thức php artisan queue:work --queue=high,default
070php artisan queue:work --queue=high,default
99Cảnh báo
Một phiên bản mới của công việc được khởi tạo trước khi gọi phương thức070; .
php artisan queue:work --queue=high,default
Thử lại công việc thất bại
Để xem tất cả các công việc thất bại đã được chèn vào bảng cơ sở dữ liệu
php artisan queue:work --queue=high,default
059 của bạn, bạn có thể sử dụng lệnh Artisan php artisan queue:work --queue=high,default
076Lệnh
php artisan queue:work --queue=high,default
076 sẽ liệt kê ID công việc, kết nối, hàng đợi, thời gian thất bại và các thông tin khác về công việc. ID công việc có thể được sử dụng để thử lại công việc không thành công. Chẳng hạn, để thử lại một công việc không thành công có ID là php artisan queue:work --queue=high,default
078, hãy đưa ra lệnh sauphp artisan queue:work --queue=high,default
30Nếu cần, bạn có thể chuyển nhiều ID cho lệnh
php artisan queue:work --queue=high,default
31Bạn cũng có thể thử lại tất cả các công việc không thành công cho một hàng đợi cụ thể
php artisan queue:work --queue=high,default
32Để thử lại tất cả các công việc không thành công của bạn, hãy thực hiện lệnh
php artisan queue:work --queue=high,default
079 và chuyển php artisan queue:work --queue=high,default
080 làm IDNếu bạn muốn xóa một công việc không thành công, bạn có thể sử dụng lệnh
php artisan queue:work --queue=high,default
081php artisan queue:work --queue=high,default
33Lưu ý
Khi sử dụng Horizon, bạn nên sử dụng lệnh082 để xóa một công việc không thành công thay vì lệnh
php artisan queue:work --queue=high,default
081.
php artisan queue:work --queue=high,default
Để xóa tất cả các công việc thất bại khỏi bảng
php artisan queue:work --queue=high,default
059, bạn có thể sử dụng lệnh php artisan queue:work --queue=high,default
085Bỏ qua các mô hình bị thiếu
Khi đưa một mô hình Eloquent vào một công việc, mô hình đó sẽ tự động được tuần tự hóa trước khi được đưa vào hàng đợi và được truy xuất lại từ cơ sở dữ liệu khi công việc được xử lý. Tuy nhiên, nếu mô hình đã bị xóa trong khi công việc đang chờ công nhân xử lý, công việc của bạn có thể thất bại với một
php artisan queue:work --queue=high,default
086Để thuận tiện, bạn có thể chọn tự động xóa công việc với các mô hình bị thiếu bằng cách đặt thuộc tính
php artisan queue:work --queue=high,default
087 của công việc thành php artisan queue:work --queue=high,default
618. Khi thuộc tính này được đặt thành php artisan queue:work --queue=high,default
618, Laravel sẽ lặng lẽ loại bỏ công việc mà không đưa ra ngoại lệphp artisan queue:work --queue=high,default
34Cắt tỉa công việc thất bại
Bạn có thể lược bớt các bản ghi trong bảng
php artisan queue:work --queue=high,default
059 của ứng dụng bằng cách gọi lệnh php artisan queue:work --queue=high,default
091 Artisanphp artisan queue:work --queue=high,default
35Theo mặc định, tất cả các bản ghi công việc không thành công hơn 24 giờ sẽ bị cắt bớt. Nếu bạn cung cấp tùy chọn
php artisan queue:work --queue=high,default
092 cho lệnh, chỉ các bản ghi công việc không thành công được chèn trong N số giờ qua mới được giữ lại. Ví dụ: lệnh sau sẽ xóa tất cả các bản ghi công việc không thành công đã được chèn hơn 48 giờ trướcphp artisan queue:work --queue=high,default
36Lưu trữ các công việc bị lỗi trong DynamoDB
Laravel cũng hỗ trợ lưu trữ bản ghi công việc không thành công của bạn trong DynamoDB thay vì bảng cơ sở dữ liệu quan hệ. Tuy nhiên, bạn phải tạo một bảng DynamoDB để lưu trữ tất cả các bản ghi công việc không thành công. Thông thường, bảng này nên được đặt tên là
php artisan queue:work --queue=high,default
059, nhưng bạn nên đặt tên cho bảng dựa trên giá trị của giá trị cấu hình php artisan queue:work --queue=high,default
094 trong tệp cấu hình php artisan queue:work --queue=high,default
09 của ứng dụng của bạnBảng
php artisan queue:work --queue=high,default
059 phải có khóa phân vùng chính chuỗi có tên là php artisan queue:work --queue=high,default
097 và khóa sắp xếp chính chuỗi có tên là php artisan queue:work --queue=high,default
098. Phần php artisan queue:work --queue=high,default
097 của khóa sẽ chứa tên ứng dụng của bạn như được xác định bởi giá trị cấu hình php artisan queue:work --queue=high,default
669 trong tệp cấu hình php artisan queue:work --queue=high,default
301 của ứng dụng của bạn. Vì tên ứng dụng là một phần của khóa của bảng DynamoDB, nên bạn có thể sử dụng cùng một bảng để lưu trữ các tác vụ không thành công cho nhiều ứng dụng LaravelNgoài ra, hãy đảm bảo rằng bạn đã cài đặt AWS SDK để ứng dụng Laravel của bạn có thể giao tiếp với Amazon DynamoDB
php artisan queue:work --queue=high,default
37Tiếp theo, đặt giá trị của tùy chọn cấu hình
php artisan queue:work --queue=high,default
302 thành php artisan queue:work --queue=high,default
48. Ngoài ra, bạn nên xác định các tùy chọn cấu hình php artisan queue:work --queue=high,default
304, php artisan queue:work --queue=high,default
305 và php artisan queue:work --queue=high,default
306 trong mảng cấu hình tác vụ thất bại. Các tùy chọn này sẽ được sử dụng để xác thực với AWS. Khi sử dụng trình điều khiển php artisan queue:work --queue=high,default
48, tùy chọn cấu hình php artisan queue:work --queue=high,default
308 là không cần thiếtphp artisan queue:work --queue=high,default
38Vô hiệu hóa lưu trữ công việc thất bại
Bạn có thể hướng dẫn Laravel loại bỏ các công việc thất bại mà không lưu trữ chúng bằng cách đặt giá trị của tùy chọn cấu hình
php artisan queue:work --queue=high,default
302 thành php artisan queue:work --queue=high,default
06. Thông thường, điều này có thể được thực hiện thông qua biến môi trường php artisan queue:work --queue=high,default
311Sự kiện Công việc Thất bại
Nếu bạn muốn đăng ký một trình lắng nghe sự kiện sẽ được gọi khi một công việc không thành công, bạn có thể sử dụng phương thức
php artisan queue:work --queue=high,default
313 của mặt tiền php artisan queue:work --queue=high,default
312. Ví dụ: chúng tôi có thể đính kèm một bao đóng cho sự kiện này từ phương thức php artisan queue:work --queue=high,default
42 của php artisan queue:work --queue=high,default
72 có trong Laravelphp artisan queue:work --queue=high,default
39Xóa công việc khỏi hàng đợi
Lưu ý
Khi sử dụng Horizon, bạn nên sử dụng lệnh316 để xóa công việc khỏi hàng đợi thay vì lệnh
php artisan queue:work --queue=high,default
317.
php artisan queue:work --queue=high,default
Nếu bạn muốn xóa tất cả các công việc khỏi hàng đợi mặc định của kết nối mặc định, bạn có thể thực hiện bằng cách sử dụng lệnh Artisan
php artisan queue:work --queue=high,default
317Bạn cũng có thể cung cấp đối số
php artisan queue:work --queue=high,default
319 và tùy chọn php artisan queue:work --queue=high,default
09 để xóa công việc khỏi một kết nối và hàng đợi cụ thểphp artisan queue:work --queue=high,default
00Cảnh báo
Xóa công việc khỏi hàng đợi chỉ khả dụng cho trình điều khiển hàng đợi SQS, Redis và cơ sở dữ liệu. Ngoài ra, quá trình xóa thông báo SQS mất tối đa 60 giây, vì vậy các công việc được gửi đến hàng đợi SQS tối đa 60 giây sau khi bạn xóa hàng đợi cũng có thể bị xóa.
Theo dõi hàng đợi của bạn
Nếu hàng đợi của bạn nhận được một loạt công việc đột ngột, nó có thể trở nên quá tải, dẫn đến thời gian chờ đợi lâu để hoàn thành công việc. Nếu bạn muốn, Laravel có thể thông báo cho bạn khi số lượng công việc hàng đợi của bạn vượt quá ngưỡng đã chỉ định
Để bắt đầu, bạn nên lên lịch cho lệnh
php artisan queue:work --queue=high,default
321 chạy mỗi phút. Lệnh chấp nhận tên của hàng đợi bạn muốn theo dõi cũng như ngưỡng số lượng công việc mong muốn của bạnphp artisan queue:work --queue=high,default
01Chỉ lập lịch cho lệnh này là không đủ để kích hoạt thông báo cảnh báo bạn về tình trạng quá tải của hàng đợi. Khi lệnh gặp một hàng đợi có số lượng công việc vượt quá ngưỡng của bạn, một sự kiện
php artisan queue:work --queue=high,default
322 sẽ được gửi đi. Bạn có thể lắng nghe sự kiện này trong php artisan queue:work --queue=high,default
323 của ứng dụng để gửi thông báo cho bạn hoặc nhóm phát triển của bạnphp artisan queue:work --queue=high,default
02Sự kiện việc làm
Sử dụng các phương thức
php artisan queue:work --queue=high,default
324 và php artisan queue:work --queue=high,default
325 trên mặt tiền php artisan queue:work --queue=high,default
312, bạn có thể chỉ định các cuộc gọi lại sẽ được thực hiện trước hoặc sau khi một công việc xếp hàng đợi được xử lý. Các cuộc gọi lại này là cơ hội tuyệt vời để thực hiện ghi nhật ký bổ sung hoặc thống kê gia tăng cho trang tổng quan. Thông thường, bạn nên gọi các phương thức này từ phương thức php artisan queue:work --queue=high,default
42 của nhà cung cấp dịch vụ. Ví dụ: chúng tôi có thể sử dụng php artisan queue:work --queue=high,default
72 đi kèm với Laravelphp artisan queue:work --queue=high,default
03Sử dụng phương thức
php artisan queue:work --queue=high,default
329 trên mặt tiền php artisan queue:work --queue=high,default
312, bạn có thể chỉ định các lệnh gọi lại thực thi trước khi worker cố gắng tìm nạp một công việc từ hàng đợi. Ví dụ: bạn có thể đăng ký đóng để khôi phục bất kỳ giao dịch nào bị bỏ ngỏ do một công việc thất bại trước đó