Phiên bản mới của php

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 đợi

Lư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 nhau

Lư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ối

use 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ơn

php 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

15

Cuố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ạn

php artisan queue:work --queue=high,default

6

là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ình

Cụ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 Redis

Việ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ụng

Cảnh báo
Đặt

php artisan queue:work --queue=high,default

21 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ý.

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.

    php artisan queue:work --queue=high,default

    26
  • cây đậu.

    php artisan queue:work --queue=high,default

    27
  • làm lại.

    php artisan queue:work --queue=high,default

    28 hoặc phần mở rộng phpredis PHP

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 Artisan

php artisan queue:work --queue=high,default

0

Lớ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ản

php artisan queue:work --queue=high,default

3

Trong 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

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 dependencies

If 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 provider

php artisan queue:work --queue=high,default

4

Warning
Binary data, such as raw image contents, should be passed through the

php artisan queue:work --queue=high,default

44 function before being passed to a queued job. Otherwise, the job may not properly serialize to JSON when being placed on the queue.

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 relationships

php artisan queue:work --queue=high,default

7

Furthermore, 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, the

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, 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.

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 class

php artisan queue:work --queue=high,default

5

In 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 processing

In 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 class

php artisan queue:work --queue=high,default

9

In 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 queue

Cả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

52

php artisan queue:work --queue=high,default

3

Khó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ụng

php artisan queue:work --queue=high,default

0

Lư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ệc

php artisan queue:work --queue=high,default

62 để thay thế.

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ây

php artisan queue:work --queue=high,default

1

Mặ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

65

php artisan queue:work --queue=high,default

2

Như 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ông

php artisan queue:work --queue=high,default

3

Lư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

68

Ví 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ạn

php artisan queue:work --queue=high,default

4

Trong 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

5

Khi 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

6

Việ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ữa

Nế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

80

php artisan queue:work --queue=high,default

7

Lưu ý
Nếu đang sử dụng Redis, bạn có thể sử dụng phần mềm trung gian

php artisan queue:work --queue=high,default

81, đượ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.

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ệc

Ví 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ạn

php artisan queue:work --queue=high,default

8

Mọ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

9

Nế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

80

php artisan queue:work --queue=high,default

60

Phầ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

61

Cảnh báo Phần mềm trung gian

php artisan queue:work --queue=high,default

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ử

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

97

php 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 định

Ví 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 gian

php 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ệc

php artisan queue:work --queue=high,default

64

Bê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 chung

php artisan queue:work --queue=high,default

65

Lưu ý
Nếu bạn đang sử dụng Redis, bạn có thể sử dụng phần mềm trung gian

php artisan queue:work --queue=high,default

603, đượ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.

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ệc

php artisan queue:work --queue=high,default

66

Nế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

607

php artisan queue:work --queue=high,default

67

Trong 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ạn

Gử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 đi

php artisan queue:work --queue=high,default

68

Cả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

69

Bạ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ệt

php 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ại

php artisan queue:work --queue=high,default

01

Cô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ình

Khi 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ức

Nế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ình

php artisan queue:work --queue=high,default

616 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.

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ình

php artisan queue:work --queue=high,default

02

Tươ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ện

php artisan queue:work --queue=high,default

03

chuỗ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ên

php artisan queue:work --queue=high,default

04

Ngoà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

05

Cảnh báo
Xóa công việc bằng cách sử dụng phương pháp

php artisan queue:work --queue=high,default

628 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.

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ác

php artisan queue:work --queue=high,default

06

Thấ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ệc

php 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

php artisan queue:work --queue=high,default

633 trong các cuộc gọi lại chuỗi

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ệc

php artisan queue:work --queue=high,default

08

Ngoà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ệc

php artisan queue:work --queue=high,default

09

Gử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

629

php artisan queue:work --queue=high,default

30

Bạ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ệc

php artisan queue:work --queue=high,default

31

Ngoà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ệc

php artisan queue:work --queue=high,default

32

Chỉ đị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ện

php artisan queue:work --queue=high,default

33

Nế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ệnh

php artisan queue:work --queue=high,default

34

Nỗ 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

643

php artisan queue:work --queue=high,default

35

Lưu ý
Bạn cũng có thể xác định thuộc tính

php artisan queue:work --queue=high,default

77 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.

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ình

php artisan queue:work --queue=high,default

36

Trong 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 PHP

php artisan queue:work --queue=high,default

648 để chỉ định thời gian chờ của công việc.

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 Artisan

php artisan queue:work --queue=high,default

37

Nế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ệc

php artisan queue:work --queue=high,default

39

Xử 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ưới

Giả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

646

Theo 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 định

Thấ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

656

Nế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

656

Lư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

658

php artisan queue:work --queue=high,default

40

Xá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 trong

php artisan queue:work --queue=high,default

41

gử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 CSV

php artisan queue:work --queue=high,default

42

ID 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 đi

Cả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ến

php artisan queue:work --queue=high,default

633 trong các cuộc gọi lại.

đặ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

43

Hà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 đợi

php artisan queue:work --queue=high,default

44

Chuỗ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

45

Thê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

46

Trong 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ệc

php artisan queue:work --queue=high,default

47

Cả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 định

php artisan queue:work --queue=high,default

48

Trả 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

627

php artisan queue:work --queue=high,default

49

Hủ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

666

php artisan queue:work --queue=high,default

70

Như 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ông

php artisan queue:work --queue=high,default

71

Lỗ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 đợt

Cho 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

72

Thử 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ại

php artisan queue:work --queue=high,default

73

cắ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ày

php artisan queue:work --queue=high,default

74

Theo 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ước

php 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

691

php artisan queue:work --queue=high,default

76

Tươ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

694

php artisan queue:work --queue=high,default

77

Xế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

78

Sử 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ạn

php artisan queue:work --queue=high,default

79

{note} Vì các cuộc gọi lại của

php artisan queue:work --queue=high,default

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

Chạy công nhân xếp hàng

Lệnh php artisan queue:work --queue=high,default652

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ình

Lưu ý
Để giữ cho quy trình

php artisan queue:work --queue=high,default

652 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.

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ệnh

Hã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

009

Chỉ đị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ạn

php artisan queue:work --queue=high,default

50

Theo 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

51

Xử 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 đợi

php artisan queue:work --queue=high,default

52

Tù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ũy

php artisan queue:work --queue=high,default

53

Xử 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ống

php artisan queue:work --queue=high,default

54

Xử 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ũy

php artisan queue:work --queue=high,default

55

Thờ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ữa

php artisan queue:work --queue=high,default

56

Câ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ậy

php 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

010

php artisan queue:work --queue=high,default

58

Cô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

029

Lệ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àng

Lư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ị

php artisan queue:work --queue=high,default

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.

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ạn

php artisan queue:work --queue=high,default

59

Tù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ần

Cảnh báo
Giá trị

php artisan queue:work --queue=high,default

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.

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

029

Vì 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 sau

Giá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 sau

php artisan queue:work --queue=high,default

90

Lư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

652

php artisan queue:work --queue=high,default

91

Trong 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ạn

Cảnh báo
Bạn nên đảm bảo rằng giá trị của

php artisan queue:work --queue=high,default

058 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.

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ức

Di 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ển

php artisan queue:work --queue=high,default

93

Khi 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ệc

php artisan queue:work --queue=high,default

94

Sử 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ại

php artisan queue:work --queue=high,default

95

Nế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ình

php artisan queue:work --queue=high,default

96

Nế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ình

php artisan queue:work --queue=high,default

97

Bạ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ứ ba

php artisan queue:work --queue=high,default

97

Dọ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

070

php artisan queue:work --queue=high,default

99

Cả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ức

php artisan queue:work --queue=high,default

070; .

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

076

Lệ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 sau

php artisan queue:work --queue=high,default

30

Nếu cần, bạn có thể chuyển nhiều ID cho lệnh

php artisan queue:work --queue=high,default

31

Bạ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 ID

Nế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

081

php artisan queue:work --queue=high,default

33

Lưu ý
Khi sử dụng Horizon, bạn nên sử dụng lệnh

php artisan queue:work --queue=high,default

082 để 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.

Để 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

085

Bỏ 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

34

Cắ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 Artisan

php artisan queue:work --queue=high,default

35

Theo 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ước

php artisan queue:work --queue=high,default

36

Lư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ạn

Bả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 Laravel

Ngoà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

37

Tiế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ết

php artisan queue:work --queue=high,default

38

Vô 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

311

Sự 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 Laravel

php artisan queue:work --queue=high,default

39

Xó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ệnh

php artisan queue:work --queue=high,default

316 để xóa công việc khỏi hàng đợi thay vì lệnh

php artisan queue:work --queue=high,default

317.

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

317

Bạ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

00

Cả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ạn

php artisan queue:work --queue=high,default

01

Chỉ 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ạn

php artisan queue:work --queue=high,default

02

Sự 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 Laravel

php artisan queue:work --queue=high,default

03

Sử 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 đó