Phần mở rộng php uuid

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

06 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 . A

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

07 queue driver is also included which discards queued jobs

Note
Laravel now offers Horizon, a beautiful dashboard and configuration system for your Redis powered queues. Check out the full Horizon documentation for more information

Connections Vs. Queues

Before getting started with Laravel queues, it is important to understand the distinction between "connections" and "queues". In your

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

06 configuration file, there is a

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

09 configuration array. This option defines the connections to backend queue services such as Amazon SQS, Beanstalk, or Redis. However, any given queue connection may have multiple "queues" which may be thought of as different stacks or piles of queued jobs

Note that each connection configuration example in the

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

10 configuration file contains a

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

10 attribute. This is the default queue that jobs will be dispatched to when they are sent to a given connection. In other words, if you dispatch a job without explicitly defining which queue it should be dispatched to, the job will be placed on the queue that is defined in the

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

10 attribute of the connection configuration

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');

Some applications may not need to ever push jobs onto multiple queues, instead preferring to have one simple queue. However, pushing jobs to multiple queues can be especially useful for applications that wish to prioritize or segment how jobs are processed, since the Laravel queue worker allows you to specify which queues it should process by priority. For example, if you push jobs to a

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

13 queue, you may run a worker that gives them higher processing priority

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

Driver Notes & Prerequisites

Database

In order to use the

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

14 queue driver, you will need a database table to hold the jobs. To generate a migration that creates this table, run the

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

15 Artisan command. Once the migration has been created, you may migrate your database using the

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

16 command

Finally, don't forget to instruct your application to use the

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

14 driver by updating the

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

18 variable in your application's

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

19 file

QUEUE_CONNECTION=database

Redis

In order to use the

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

20 queue driver, you should configure a Redis database connection in your

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

21 configuration file

Redis Cluster

If your Redis queue connection uses a Redis Cluster, your queue names must contain a . This is required in order to ensure all of the Redis keys for a given queue are placed into the same hash slot

Blocking

When using the Redis queue, you may use the

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

22 configuration option to specify how long the driver should wait for a job to become available before iterating through the worker loop and re-polling the Redis database

Adjusting this value based on your queue load can be more efficient than continually polling the Redis database for new jobs. For instance, you may set the value to

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

23 to indicate that the driver should block for five seconds while waiting for a job to become available

Warning
Setting

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

22 to

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

25 will cause queue workers to block indefinitely until a job is available. This will also prevent signals such as

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

26 from being handled until the next job has been processed

Other Driver Prerequisites

The following dependencies are needed for the listed queue drivers. These dependencies may be installed via the Composer package manager

  • Amazon SQS.

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

    27
  • Beanstalkd.

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

    28
  • làm lại.

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

    29 or phpredis PHP extension

Creating Jobs

Generating Job Classes

By default, all of the queueable jobs for your application are stored in the

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

30 directory. If the

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

30 directory doesn't exist, it will be created when you run the

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

32 Artisan command

php artisan make:job ProcessPodcast

The generated class will implement the

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

33 interface, indicating to Laravel that the job should be pushed onto the queue to run asynchronously

Note
Job stubs may be customized using

Class Structure

Job classes are very simple, normally containing only a

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

34 method that is invoked when the job is processed by the queue. To get started, let's take a look at an example job class. In this example, we'll pretend we manage a podcast publishing service and need to process the uploaded podcast files before they are published

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

In this example, note that we were able to pass an Eloquent model directly into the queued job's constructor. Because of the

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

35 trait that the job is using, Eloquent models and their loaded relationships will be gracefully serialized and unserialized when the job is processing

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

34 Method Dependency Injection

The

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

34 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

34 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

34 method, you may use the container's

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

40 method. The

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

40 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

34 method however you wish. Typically, you should call this method from the

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

43 method of your

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

44 service provider

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

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

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

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

Mối quan hệ xếp hàng

Bởi vì các mối quan hệ được tải cũng được tuần tự hóa, chuỗi công việc được tuần tự hóa đôi khi có thể trở nên khá lớn. Để ngăn các mối quan hệ không được tuần tự hóa, bạn có thể gọi phương thức

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

46 trên mô hình khi đặt giá trị thuộc tính. Phương thức này sẽ trả về một thể hiện của mô hình mà không có các mối quan hệ được tải của nó

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

Hơn nữa, khi một công việc được giải tuần tự hóa và các mối quan hệ mô hình được truy xuất lại từ cơ sở dữ liệu, chúng sẽ được truy xuất toàn bộ. Mọi ràng buộc về mối quan hệ trước đây đã được áp dụng trước khi mô hình được tuần tự hóa trong quá trình xếp hàng công việc sẽ không được áp dụng khi công việc được giải tuần tự hóa. Do đó, nếu bạn muốn làm việc với một tập hợp con của một mối quan hệ nhất định, bạn nên hạn chế lại mối quan hệ đó trong công việc được xếp hàng đợi của mình

Công việc độc đáo

Warning
Công việc duy nhất yêu cầu trình điều khiển bộ đệm hỗ trợ. Hiện tại, trình điều khiển bộ nhớ cache

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

47,

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

20,

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

49,

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

14,

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

51 và ________0____52 hỗ trợ khóa nguyên tử. Ngoài ra, các ràng buộc công việc duy nhất không áp dụng cho các công việc trong lô

Đôi khi, bạn có thể muốn đảm bảo rằng chỉ có một phiên bản của một công việc cụ thể nằm trong hàng đợi tại bất kỳ thời điểm nào. Bạn có thể làm như vậy bằng cách triển khai giao diện

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

53 trên lớp công việc của bạn. Giao diện này không yêu cầu bạn xác định bất kỳ phương thức bổ sung nào trên lớp của bạn

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

Trong ví dụ trên, công việc

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

54 là duy nhất. Vì vậy, công việc sẽ không được gửi đi nếu một phiên bản khác của công việc đã có trong hàng đợi và chưa xử lý xong

Trong một số trường hợp nhất định, bạn có thể muốn xác định một "chìa khóa" cụ thể để làm cho công việc trở thành duy nhất hoặc bạn có thể muốn chỉ định thời gian chờ mà sau đó công việc không còn là duy nhất. Để thực hiện điều này, bạn có thể xác định các thuộc tính hoặc phương thức

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

55 và

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

56 trong lớp công việc của mình

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

Trong ví dụ trên, công việc

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

54 là duy nhất theo ID sản phẩm. Vì vậy, bất kỳ gửi công việc mới nào có cùng ID sản phẩm sẽ bị bỏ qua cho đến khi công việc hiện tại được xử lý xong. Ngoài ra, nếu công việc hiện tại không được xử lý trong vòng một giờ, khóa duy nhất sẽ được giải phóng và một công việc khác có cùng khóa duy nhất có thể được gửi đến hàng đợi

Warning
Nếu ứng dụng của bạn gửi các 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 bạn đ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 một công việc có phải là duy nhất hay không

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

58 thay vì hợp đồng

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

53

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

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

53 được gửi đi, Laravel cố gắng lấy một công việc bằng khóa

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

55. If the lock is not acquired, the job is not dispatched. This lock is released when the job completes processing or fails all of its retry attempts. By default, Laravel will use the default cache driver to obtain this lock. However, if you wish to use another driver for acquiring the lock, you may define a

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

62 method that returns the cache driver that should be used

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

0

Note
If you only need to limit the concurrent processing of a job, use the job middleware instead

Job Middleware

Job middleware allow you to wrap custom logic around the execution of queued jobs, reducing boilerplate in the jobs themselves. For example, consider the following

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

34 method which leverages Laravel's Redis rate limiting features to allow only one job to process every five seconds

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

1

While this code is valid, the implementation of the

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

34 method becomes noisy since it is cluttered with Redis rate limiting logic. In addition, this rate limiting logic must be duplicated for any other jobs that we want to rate limit

Instead of rate limiting in the handle method, we could define a job middleware that handles rate limiting. Laravel does not have a default location for job middleware, so you are welcome to place job middleware anywhere in your application. 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

66

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

67 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

32 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

Note
Phần mềm trung gian công việc cũng có thể được chỉ định cho trình xử lý sự kiện, thư và thông báo có thể xếp hàng đợi

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ư , giới hạn tỷ lệ 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

70 của mặt tiền

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

69

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

69 trong phương pháp

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

43 của

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

73 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

75 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

76. 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 có tốc độ giới hạn trở lại hàng đợi sẽ vẫn làm tăng tổng số lượng của công việc là

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

77. Bạn có thể muốn điều chỉnh các thuộc tính

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

78 và

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

79 trên hạng công việc của mình cho phù hợp. Hoặc, bạn có thể muốn sử dụng để 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

81

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

7

Note
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

82, phần mềm này đượ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

83 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ả về phần mềm trung gian

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

63 từ phương thức

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

67 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

81

QUEUE_CONNECTION=database

0

Phần mềm trung gian

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

63 đượ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 cách sử dụng phương pháp

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

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

63 ba phút sau khi công việc bắt đầu xử lý

QUEUE_CONNECTION=database

1

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

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

63 yêu cầu trình điều khiển bộ đệm hỗ trợ. Hiện tại, trình điều khiển bộ nhớ cache

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

47,

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

20,

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

49,

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

14,

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

51 và ________0____52 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

63 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

98

QUEUE_CONNECTION=database

2

Điều chỉnh ngoại lệ

Laravel bao gồm một

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

99 phần mềm trung gian cho phép bạn điều tiết 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 trường hợp ngoại lệ, bạn có thể trả lại phần mềm trung gian

QUEUE_CONNECTION=database

00 từ phương thức

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

67 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

QUEUE_CONNECTION=database

3

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

QUEUE_CONNECTION=database

02 khi đính kèm phần mềm trung gian vào công việc

QUEUE_CONNECTION=database

4

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

75 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

QUEUE_CONNECTION=database

5

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

QUEUE_CONNECTION=database

04, phần mềm này được tinh chỉnh cho Redis và hiệu quả hơn phần mềm trung gian điều chỉnh ngoại lệ cơ bản

điều phối công việc

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

QUEUE_CONNECTION=database

05 trên chính công việc đó. Các đối số được truyền cho phương thức

QUEUE_CONNECTION=database

05 sẽ được trao cho hàm tạo của công việc

QUEUE_CONNECTION=database

6

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

QUEUE_CONNECTION=database

07 và

QUEUE_CONNECTION=database

08

QUEUE_CONNECTION=database

7

Trong các ứng dụng Laravel mới, trình điều khiển

QUEUE_CONNECTION=database

09 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

06 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

QUEUE_CONNECTION=database

11 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

QUEUE_CONNECTION=database

8

Warning
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

QUEUE_CONNECTION=database

12 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ý

QUEUE_CONNECTION=database

9

Bạn cũng có thể

QUEUE_CONNECTION=database

05 một lần đóng và xâu chuỗi phương thức

QUEUE_CONNECTION=database

14 vào trình trợ giúp

QUEUE_CONNECTION=database

05 để 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 make:job ProcessPodcast

0

Đ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

QUEUE_CONNECTION=database

16. 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 make:job ProcessPodcast

1

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

QUEUE_CONNECTION=database

17 trong mảng cấu hình của kết nối hàng đợi

Khi tùy chọn

QUEUE_CONNECTION=database

17 là

QUEUE_CONNECTION=database

19, 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ỏ

Note
Đặt tùy chọn cấu hình

QUEUE_CONNECTION=database

17 thành

QUEUE_CONNECTION=database

19 cũng sẽ khiến mọi trình xử lý sự kiện, thư, thông báo và sự kiện phát sóng trong hàng đợi đượ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

QUEUE_CONNECTION=database

17 thành

QUEUE_CONNECTION=database

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

QUEUE_CONNECTION=database

24 vào thao tác điều phối của mình

php artisan make:job ProcessPodcast

2

Tương tự như vậy, nếu tùy chọn cấu hình

QUEUE_CONNECTION=database

17 được đặt thành

QUEUE_CONNECTION=database

19, bạn có thể chỉ ra 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 make:job ProcessPodcast

3

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 đã xếp hàng, bạn có thể sử dụng phương pháp

QUEUE_CONNECTION=database

27 được cung cấp bởi mặt tiền

QUEUE_CONNECTION=database

28. 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 make:job ProcessPodcast

4

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 make:job ProcessPodcast

5

Warning
Việc xóa các công việc bằng cách sử dụng phương pháp

QUEUE_CONNECTION=database

29 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

QUEUE_CONNECTION=database

30 và

QUEUE_CONNECTION=database

31. 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 make:job ProcessPodcast

6

Thất bại chuỗi

When chaining jobs, you may use the

QUEUE_CONNECTION=database

32 method to specify a closure that should be invoked if a job within the chain fails. Cuộc gọi lại đã cho sẽ nhận được phiên bản

QUEUE_CONNECTION=database

33 gây ra lỗi công việc

php artisan make:job ProcessPodcast

7

{note} Vì các cuộc gọi lại chuỗi đượ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

QUEUE_CONNECTION=database

34 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

QUEUE_CONNECTION=database

31 khi điều động công việc

php artisan make:job ProcessPodcast

8

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

QUEUE_CONNECTION=database

31 trong hàm tạo của công việc

php artisan make:job ProcessPodcast

9

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

QUEUE_CONNECTION=database

30

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

0

Bạn có thể xâu chuỗi các phương thức

QUEUE_CONNECTION=database

30 và

QUEUE_CONNECTION=database

31 lại với nhau để chỉ định kết nối và hàng đợi cho một công việc

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

1

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

QUEUE_CONNECTION=database

30 trong hàm tạo của công việc

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

2

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

QUEUE_CONNECTION=database

41 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 xử lý bởi nhân viên trừ khi công việc đang được xử lý chỉ định số lần nó có thể được thử

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

3

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ề xử lý các công việc không thành công, hãy tham khảo. Nếu

QUEUE_CONNECTION=database

42 được cung cấp cho lệnh

QUEUE_CONNECTION=database

43, công việc sẽ thử lại vô thời hạn

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ị

QUEUE_CONNECTION=database

41 được cung cấp trên dòng lệnh

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

4

Nỗ lực dựa trên thời gian

Thay thế cho việc xác định số lần một công việc có thể được thử trước khi nó không thành công, 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 một phương thức

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

80 vào lớp công việc của bạn. Phương thức này sẽ trả về một thể hiện

QUEUE_CONNECTION=database

46

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

5

Note
Bạn cũng có thể xác định một thuộc tính

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

78 hoặc phương thức

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

80 trên

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ệ chưa được xử lý nhất định (trái ngược với việc được giải phóng trực tiếp bằng phương thức

QUEUE_CONNECTION=database

49). Để 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

79 trên lớp công việc của mình

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

6

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ờ

Warning
Tiện ích mở rộng PHP

QUEUE_CONNECTION=database

51 phải được cài đặt để 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. Typically, the worker will be restarted automatically by a

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

QUEUE_CONNECTION=database

52 trên dòng lệnh Artisan

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

7

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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

8

Đô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à hết thời gian chờ, bạn có thể xác định thuộc tính

QUEUE_CONNECTION=database

53 trên lớp công việc

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

9

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

QUEUE_CONNECTION=database

41 được sử dụng trên lệnh

QUEUE_CONNECTION=database

43 Artisan. 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

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

QUEUE_CONNECTION=database

49

Theo mặc định, phương thức

QUEUE_CONNECTION=database

49 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

QUEUE_CONNECTION=database

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

QUEUE_CONNECTION=database

59

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

QUEUE_CONNECTION=database

59. Hoặc, để thuận tiện, bạn có thể chuyển một thông báo lỗi chuỗi sẽ được chuyển thành ngoại lệ cho bạn

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

0

Note
Để biết thêm thông tin về các công việc thất bại, hãy xem

Nhóm công việc

Tính năng tạo lô công việc của Laravel cho phép bạn dễ dàng thực thi một lô 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

QUEUE_CONNECTION=database

61 Artisan

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

1

Xác định công việc Batchable

Để xác định một công việc có thể thực hiện theo lô, bạn nên làm như bình thường; . Đặc điểm này cung cấp quyền truy cập vào một phương pháp

QUEUE_CONNECTION=database

63 có thể được sử dụng để truy xuất lô hiện tại mà công việc đang thực hiện trong đó

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

2

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

QUEUE_CONNECTION=database

63 của mặt tiền

QUEUE_CONNECTION=database

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

QUEUE_CONNECTION=database

66,

QUEUE_CONNECTION=database

32 và

QUEUE_CONNECTION=database

68 để 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

QUEUE_CONNECTION=database

69 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

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

3

ID của lô, có thể được truy cập thông qua thuộc tính

QUEUE_CONNECTION=database

70, có thể được sử dụng để biết thông tin về lô sau khi nó được gửi đi

Warning
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 của Laravel, bạn không nên sử dụng biến

QUEUE_CONNECTION=database

34 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

QUEUE_CONNECTION=database

72 trong khi xác định lô

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

4

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

QUEUE_CONNECTION=database

30 và

QUEUE_CONNECTION=database

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

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

5

Chuỗi trong lô

Bạn có thể xác định một tập hợp 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

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

6

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ô đó.

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

7

Trong ví dụ này, chúng tôi sẽ sử dụng công việc

QUEUE_CONNECTION=database

75 để 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

QUEUE_CONNECTION=database

76 trên phiên bản lô có thể được truy cập thông qua phương pháp

QUEUE_CONNECTION=database

63 của công việc

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

8

Warning
Bạn chỉ có thể thêm công việc vào một đợt từ bên trong một công việc thuộc cùng một đợt

Kiểm tra lô hàng

Phiên bản

QUEUE_CONNECTION=database

69 đượ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 pháp để hỗ trợ bạn tương tác và kiểm tra một loạt công việc nhất định

use App\Jobs\ProcessPodcast;

use App\Services\AudioProcessor;

$this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) {

return $job->handle($app->make(AudioProcessor::class));

9

Trả lại hàng loạt từ các tuyến đường

Tất cả các phiên bản

QUEUE_CONNECTION=database

69 đề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

QUEUE_CONNECTION=database

81 của mặt tiền

QUEUE_CONNECTION=database

28

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

0

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

QUEUE_CONNECTION=database

82 trong trường hợp

QUEUE_CONNECTION=database

69

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

1

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

34 của chúng không

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

2

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

QUEUE_CONNECTION=database

32 (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

QUEUE_CONNECTION=database

86 trong khi gửi lô

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

3

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

QUEUE_CONNECTION=database

87 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

QUEUE_CONNECTION=database

87 chấp nhận UUID của lô có công việc không thành công sẽ được thử lại

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

4

cắt tỉa hàng loạt

Không cắt tỉa, bảng

QUEUE_CONNECTION=database

89 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

QUEUE_CONNECTION=database

90 chạy hàng ngày

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

5

By default, all finished batches that are more than 24 hours old will be pruned. Bạn có thể sử dụng tùy chọn

QUEUE_CONNECTION=database

91 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

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

6

Đôi khi, bảng

QUEUE_CONNECTION=database

92 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

QUEUE_CONNECTION=database

90 để lược bỏ 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

QUEUE_CONNECTION=database

94

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

7

Tương tự như vậy, bảng

QUEUE_CONNECTION=database

92 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

QUEUE_CONNECTION=database

90 để 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

QUEUE_CONNECTION=database

97

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

8

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

* Create a new job instance.

* @param \App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

$this->podcast = $podcast->withoutRelations();

9

Sử dụng phương pháp

QUEUE_CONNECTION=database

32, bạn có thể cung cấp một bao đóng sẽ được thực thi nếu bao đóng hàng đợi không hoàn thành thành công sau khi sử dụng hết tất cả hàng đợi của bạn

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

0

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

QUEUE_CONNECTION=database

32 đượ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

QUEUE_CONNECTION=database

34 trong các cuộc gọi lại của

QUEUE_CONNECTION=database

32

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

Lệnh QUEUE_CONNECTION=database43

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

QUEUE_CONNECTION=database

43 Artisan. Lưu ý rằng một khi lệnh

QUEUE_CONNECTION=database

43 đã 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

Note
Để giữ cho quy trình

QUEUE_CONNECTION=database

43 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 để đả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 make:job ProcessPodcast

06 khi gọi lệnh

QUEUE_CONNECTION=database

43 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. Ngoài ra, hãy nhớ rằng mọi trạng thái tĩnh 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 make:job ProcessPodcast

08. Khi sử dụng lệnh

php artisan make:job ProcessPodcast

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

QUEUE_CONNECTION=database

43. Đ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. , bạn có thể sử dụng giá trị cấu hình

php artisan make:job ProcessPodcast

12

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 make:job ProcessPodcast

13 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

06 của bạn

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

1

Theo mặc định, lệnh

QUEUE_CONNECTION=database

43 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 make:job ProcessPodcast

16 trên kết nối hàng đợi

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

20 của bạn, bạn có thể đưa ra lệnh sau để bắt đầu một worker chỉ xử lý hàng đợi đó

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

2

Xử lý một số lượng công việc được chỉ định

Tùy chọn

php artisan make:job ProcessPodcast

18 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

3

Tùy chọn

php artisan make:job ProcessPodcast

19 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 để 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 bất kỳ bộ nhớ nào họ có thể đã tích lũy

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

4

Processing All Queued Jobs & Then Exiting

Tùy chọn

php artisan make:job ProcessPodcast

20 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

5

Xử lý công việc trong một số giây nhất định

Tùy chọn

php artisan make:job ProcessPodcast

21 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 để 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

6

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 make:job ProcessPodcast

22 xác định số giây công nhân sẽ "ngủ" 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

7

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ý ảnh với thư viện GD, bạn nên giải phóng bộ nhớ bằng

php artisan make:job ProcessPodcast

23 khi xử lý ảnh xong

Ư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

06 của bạn, bạn có thể đặt mặc định ____0_______10 cho kết nối ____0_______20 của mình thành ____30_______27. 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

13 như vậy

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

8

Để bắt đầu một công nhân xác minh rằng tất cả các công việc hàng đợi

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

13 đượ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

php artisan make:job ProcessPodcast

27, hãy chuyển danh sách tên hàng đợi được phân tách bằng dấu phẩy cho lệnh

php artisan make:job ProcessPodcast

13

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

9

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 ban hành lệnh

php artisan make:job ProcessPodcast

32

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 make:job ProcessPodcast

32 được thực thi, bạn nên chạy trình quản lý quy trình, chẳng hạn như để tự động khởi động lại nhân viên xếp hàng

Note
Hàng đợi sử dụng bộ đệm để lưu các 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

06 của bạn, mỗi kết nối hàng đợi xác định một tùy chọn

php artisan make:job ProcessPodcast

35. 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 make:job ProcessPodcast

35 được đặt thành

php artisan make:job ProcessPodcast

37, thì 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 make:job ProcessPodcast

35 thành số giây tối đa mà công việc của bạn sẽ mất một cách hợp lý để hoàn tất quá trình xử lý

Warning
Kết nối hàng đợi duy nhất không chứa giá trị

php artisan make:job ProcessPodcast

35 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

QUEUE_CONNECTION=database

43 Artisan hiển thị tùy chọn

QUEUE_CONNECTION=database

52. Theo mặc định, giá trị

QUEUE_CONNECTION=database

52 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, công nhân sẽ được khởi động lại tự động bởi một

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

0

Tùy chọn cấu hình

php artisan make:job ProcessPodcast

35 và tùy chọn

QUEUE_CONNECTION=database

52 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

Warning
Giá trị

QUEUE_CONNECTION=database

52 phải luôn ngắn hơn giá trị cấu hình

php artisan make:job ProcessPodcast

35 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. If your

QUEUE_CONNECTION=database

52 option is longer than your

php artisan make:job ProcessPodcast

35 configuration value, your jobs may be processed twice

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 các quy trình

QUEUE_CONNECTION=database

43. Quy trình

QUEUE_CONNECTION=database

43 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 make:job ProcessPodcast

32

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 các quy trình

QUEUE_CONNECTION=database

43 của bạn thoát và tự động khởi động lại chúng. Ngoài ra, trình theo dõi quy trình có thể cho phép bạn chỉ định có bao nhiêu quy trình 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

QUEUE_CONNECTION=database

43 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

1

Note
Nếu việc tự mình đị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, phần mềm 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 make:job ProcessPodcast

55. 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 make:job ProcessPodcast

56 bắt đầu và theo dõi các quy trình của

QUEUE_CONNECTION=database

43

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

2

Trong ví dụ này, chỉ thị

php artisan make:job ProcessPodcast

12 sẽ hướng dẫn Người giám sát chạy tám quy trình

QUEUE_CONNECTION=database

43 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 make:job ProcessPodcast

60 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

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

php artisan make:job ProcessPodcast

61 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

3

Để 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 để. 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 make:job ProcessPodcast

62. 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 make:job ProcessPodcast

62 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 make:job ProcessPodcast

64 để tạo di chuyển

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

4

Khi chạy một quy trình, 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

QUEUE_CONNECTION=database

41 trên lệnh

QUEUE_CONNECTION=database

43. Nếu bạn không chỉ định giá trị cho tùy chọn

QUEUE_CONNECTION=database

41, 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 make:job ProcessPodcast

68 của loại công việc

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

5

Sử dụng tùy chọn

php artisan make:job ProcessPodcast

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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

6

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

QUEUE_CONNECTION=database

02 trong lớp công việc của mình

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

7

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

QUEUE_CONNECTION=database

02 trên lớp công việc của mình

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

8

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

QUEUE_CONNECTION=database

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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUnique;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique

* The number of seconds after which the job's unique lock will be released.

* The unique ID of the job.

return $this->product->id;

8

Dọn dẹp sau khi thất bại công việc

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ể xác định một phương pháp

php artisan make:job ProcessPodcast

73 trên lớp công việc của mình. Phiên bản

QUEUE_CONNECTION=database

33 khiến công việc thất bại sẽ được chuyển sang phương thức

php artisan make:job ProcessPodcast

73

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

0

Warning
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 make:job ProcessPodcast

73;

Retrying Failed Jobs

Để 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 make:job ProcessPodcast

62 của bạn, bạn có thể sử dụng lệnh

php artisan make:job ProcessPodcast

79 Artisan

Lệnh

php artisan make:job ProcessPodcast

79 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 make:job ProcessPodcast

81, hãy đưa ra lệnh sau

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

1

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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

2

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ể

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

3

Để 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 make:job ProcessPodcast

82 và chuyển

php artisan make:job ProcessPodcast

83 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 make:job ProcessPodcast

84

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

4

Note
Khi sử dụng Horizon, bạn nên sử dụng lệnh

php artisan make:job ProcessPodcast

85 để xóa một công việc bị lỗi thay vì lệnh

php artisan make:job ProcessPodcast

84

Để xóa tất cả các công việc thất bại của bạn khỏi bảng

php artisan make:job ProcessPodcast

62, bạn có thể sử dụng lệnh

php artisan make:job ProcessPodcast

88

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 make:job ProcessPodcast

89

Để 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 make:job ProcessPodcast

90 của công việc thành

QUEUE_CONNECTION=database

19. Khi thuộc tính này được đặt thành

QUEUE_CONNECTION=database

19, Laravel sẽ lặng lẽ loại bỏ công việc mà không đưa ra ngoại lệ

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

5

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 make:job ProcessPodcast

62 của ứng dụng bằng cách gọi lệnh

php artisan make:job ProcessPodcast

94 Artisan

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

6

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 make:job ProcessPodcast

95 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

7

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 make:job ProcessPodcast

62, 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 make:job ProcessPodcast

97 trong tệp cấu hình

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

10 của ứng dụng của bạn

Bảng

php artisan make:job ProcessPodcast

62 phải có khóa phân vùng chính chuỗi có tên là

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

00 và khóa sắp xếp chính chuỗi có tên là

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

01. Phần

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

00 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

QUEUE_CONNECTION=database

72 trong tệp cấu hình

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

04 của ứng dụng. Vì tên ứng dụng là một phần trong 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

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

8

Tiếp theo, đặt giá trị của tùy chọn cấu hình

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

05 thành

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

49. Ngoài ra, bạn nên xác định các tùy chọn cấu hình

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

07,

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

08 và

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

09 trong mảng cấu hình lệnh bị lỗ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

49, tùy chọn cấu hình

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

11 là không cần thiết

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;

class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing

9

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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

05 thành

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

07. Thông thường, điều này có thể được thực hiện thông qua biến môi trường

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

14

Sự kiện Công việc Thất bại

Nếu bạn muốn đăng ký một trình xử lý 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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

16 của mặt tiền

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

15. Ví dụ: chúng tôi có thể đính kèm một kết thúc cho sự kiện này từ phương pháp

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

43 của

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

73 được bao gồm trong Laravel

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

00

Xóa công việc khỏi hàng đợi

Note
Khi sử dụng Horizon, bạn nên sử dụng lệnh

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

20

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 việc này bằng lệnh

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

20 Artisan

Bạn cũng có thể cung cấp đối số

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

22 và tùy chọn

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

10 để 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

01

Warning
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, do đó, các công việc được gửi tới 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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

24 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

02

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

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

25 sẽ được gửi đi. Bạn có thể lắng nghe sự kiện này trong

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

26 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

03

Sự kiện việc làm

Sử dụng các phương thức

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

27 và

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

28 trên mặt tiền

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

15, bạn có thể chỉ định các cuộc gọi lại sẽ được thực thi trước hoặc sau khi xử lý công việc xếp hàng đợi. 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

43 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

73 đi kèm với Laravel

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

04

Sử dụng phương thức

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

32 trên mặt tiền

use App\Services\AudioProcessor;

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Foundation\Bus\Dispatchable;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Queue\SerializesModels;

class ProcessPodcast implements ShouldQueue

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

* Create a new job instance.

* @param App\Models\Podcast $podcast

public function __construct(Podcast $podcast)

* @param App\Services\AudioProcessor $processor

public function handle(AudioProcessor $processor)

// Process uploaded podcast...

15, 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 đó