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 jobsNote 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. QueuesBefore 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 jobsNote 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 configurationuse 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 priorityphp artisan queue:work --queue=high,default
Driver Notes & PrerequisitesDatabaseIn 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 commandFinally, 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 fileQUEUE_CONNECTION=database
RedisIn 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 fileRedis 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 databaseAdjusting 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 availableWarning 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 PrerequisitesThe 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 JobsGenerating Job ClassesBy 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 commandphp 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 asynchronouslyNote Job stubs may be customized using
Class StructureJob 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 publisheduse 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 processingIf 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 dependenciesIf 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 provideruse 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àngBở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 đáoWarning 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ạnuse 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ý xongTrong 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ìnhuse 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 đợiWarning 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
53use 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 usedphp artisan queue:work --queue=high,default
0Note If you only need to limit the concurrent processing of a job, use the job middleware instead
Job MiddlewareJob 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 secondsphp artisan queue:work --queue=high,default
1While 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 limitInstead 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
66php artisan queue:work --queue=high,default
2Như bạn có thể thấy, giống như phần mềm trung gian định tuyến, phần mềm trung gian công việc nhận công việc đang được xử lý và một cuộc gọi lại sẽ được gọi để tiếp tục xử lý công việc Sau khi tạo phần mềm trung gian công việc, chúng có thể được gắn vào một công việc bằng cách trả lại chúng từ phương thức php artisan queue:work --queue=high,default
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ôngphp artisan queue:work --queue=high,default
3Note 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
69Ví 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ạnphp artisan queue:work --queue=high,default
4Trong ví dụ trên, chúng tôi đã xác định giới hạn tỷ lệ hàng giờ; . Ngoài ra, bạn có thể chuyển bất kỳ giá trị nào bạn muốn sang phương pháp php artisan queue:work --queue=high,default
75 của giới hạn tỷ lệ; php artisan queue:work --queue=high,default
5Khi bạn đã xác định giới hạn tốc độ của mình, bạn có thể đính kèm bộ giới hạn tốc độ vào công việc sao lưu của mình bằng phần mềm trung gian php artisan queue:work --queue=high,default
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
6Việ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
81php artisan queue:work --queue=high,default
7Note 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ệcLaravel 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ệcVí dụ: giả sử bạn có một công việc được xếp hàng chờ cập nhật điểm tín dụng của người dùng và bạn muốn ngăn chồng chéo công việc cập nhật điểm tín dụng cho cùng một ID người dùng. Để thực hiện điều này, bạn có thể trả 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ạnphp artisan queue:work --queue=high,default
8Mọi công việc chồng chéo cùng loại sẽ được đưa trở lại hàng đợi. Bạn cũng có thể chỉ định số giây phải trôi qua trước khi công việc được phát hành sẽ được thử lại php artisan queue:work --queue=high,default
9Nếu bạn muốn xóa ngay bất kỳ công việc chồng chéo nào để chúng không bị thử lại, bạn có thể sử dụng phương pháp php artisan queue:work --queue=high,default
81QUEUE_CONNECTION=database
0Phầ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
1Cả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ệcTheo 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
98QUEUE_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 địnhVí dụ: hãy tưởng tượng một công việc được xếp hàng đợi tương tác với API của bên thứ ba bắt đầu đưa ra các ngoại lệ. Để hạn chế các 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ệnQUEUE_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ệcQUEUE_CONNECTION=database
4Bê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 chungQUEUE_CONNECTION=database
5Note 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ệcKhi 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ệcQUEUE_CONNECTION=database
6Nế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
08QUEUE_CONNECTION=database
7Trong 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ạnGửi hàng bị trì hoãnNế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 điQUEUE_CONNECTION=database
8Warning 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ệtNgoà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
9Bạ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ệtphp 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ạiphp artisan make:job ProcessPodcast
1Công việc & Giao dịch cơ sở dữ liệuMặ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 đợiKhi 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ứcNếu một giao dịch bị khôi phục do ngoại lệ xảy ra trong quá trình giao dịch, các công việc đã được gửi đi trong giao dịch đó sẽ bị loại bỏ 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ếnNế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ìnhphp artisan make:job ProcessPodcast
2Tươ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ệnphp artisan make:job ProcessPodcast
3chuỗi công việcChuỗ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ênphp artisan make:job ProcessPodcast
4Ngoà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
5Warning 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 đợiNế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ácphp artisan make:job ProcessPodcast
6Thất bại chuỗiWhen 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ệcphp 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ốiGử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ệcphp artisan make:job ProcessPodcast
8Ngoà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ệcphp artisan make:job ProcessPodcast
9Gử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
30use 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...
0Bạ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ệcuse 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...
1Ngoà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ệcuse 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...
2Chỉ định số lần thử công việc tối đa/giá trị thời gian chờSố lần thử tối đaNế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...
3Nế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ạnBạ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ệnhuse 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...
4Nỗ lực dựa trên thời gianThay 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
46use 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...
5Note 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ìnhuse 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...
6Trong 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 Artisanuse 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...
7Nế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ệcuse 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...
9Xử lý lỗiNế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 workerGiả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
49Theo 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 địnhThất bại một công việc theo cách thủ côngĐôi khi, bạn có thể cần đánh dấu thủ công một công việc là "thất bại". Để làm như vậy, bạn có thể gọi phương thức QUEUE_CONNECTION=database
59Nế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ạnuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
0Note Để 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ệcTí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 Artisanuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
1Xá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));
2gử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 CSVuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
3ID 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 điWarning 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));
4Hàng loạt kết nối & hàng đợiNế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 đợiuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
5Chuỗ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));
6Thê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));
7Trong 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ệcuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
8Warning 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àngPhiê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 địnhuse App\Jobs\ProcessPodcast; use App\Services\AudioProcessor; $this->app->bindMethod([ProcessPodcast::class, 'handle'], function ($job, $app) { return $job->handle($app->make(AudioProcessor::class));
9Trả lại hàng loạt từ các tuyến đườngTấ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();
0Hủ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();
1Như 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();
2Lỗi hàng loạtKhi 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 đợtCho phép thất bạiKhi 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();
3Thử 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();
4cắt tỉa hàng loạtKhô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();
5By 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();
7Tươ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();
8Xếp hàng đóng cửaThay 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();
9Sử 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ạnuse 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àngLệnh QUEUE_CONNECTION=database43Laravel 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ìnhNote Để 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ệnhHãy nhớ rằng, nhân viên xếp hàng là các quy trình tồn tại lâu dài và lưu trữ trạng thái ứng dụng đã khởi động trong bộ nhớ. Do đó, họ sẽ không nhận thấy những thay đổi trong cơ sở mã của bạn sau khi chúng được bắt đầu. Vì vậy, trong quá trình triển khai của bạn, hãy đảm bảo. 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
12Chỉ định Kết nối & Hàng đợiBạ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ạnuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
1Theo 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
2Xử lý một số lượng công việc được chỉ địnhTù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 đợiuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
3Tù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ũyuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
4Processing All Queued Jobs & Then ExitingTù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ốnguse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
5Xử lý công việc trong một số giây nhất địnhTù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ũyuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
6Thời gian ngủ của công nhânKhi 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ữause Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
7Cân nhắc tài nguyênDaemon 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ậyuse 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
13use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class UpdateSearchIndex implements ShouldQueue, ShouldBeUnique
9Công nhân xếp hàng & triển khaiVì 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
32Lệ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àngNote 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ệcTrong 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ânLệ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ộtuse 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;
0Tù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ầnWarning 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átTrong 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
32Vì 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 sauGiám sát cài đặtNgườ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 sauuse 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;
1Note 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ênCá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
43use 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;
2Trong 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ạnWarning 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 đầuKhi 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ứcDi 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ểnuse 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;
4Khi 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ệcuse 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;
5Sử 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ạiuse 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;
6Nế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ìnhuse 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;
7Nế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ìnhuse 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;
8Bạ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ứ bause 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;
8Dọn dẹp sau khi thất bại công việcKhi 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
73use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
0Warning 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 ArtisanLệ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 sauuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
1Nế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
2Bạ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 IDNếu bạn muốn xóa một công việc không thành công, bạn có thể sử dụng lệnh php artisan make:job ProcessPodcast
84use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
4Note 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
88Bỏ qua các mô hình bị thiếuKhi đư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
5Cắt tỉa công việc thất bạiBạ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 Artisanuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
6Theo 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ướcuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
7Lưu trữ các công việc bị lỗi trong DynamoDBLaravel 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ạnBả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 LaravelNgoài ra, hãy đảm bảo rằng bạn đã cài đặt AWS SDK để ứng dụng Laravel của bạn có thể giao tiếp với Amazon DynamoDB use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
8Tiế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ếtuse Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing; class UpdateSearchIndex implements ShouldQueue, ShouldBeUniqueUntilProcessing
9Vô hiệu hóa lưu trữ công việc thất bạiBạ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...
14Sự kiện Công việc Thất bạiNế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 Laravelphp artisan queue:work --queue=high,default
00Xóa công việc khỏi hàng đợiNote 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 ArtisanBạ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
01Warning 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ạnNế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ạnphp artisan queue:work --queue=high,default
02Chỉ 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ạnphp artisan queue:work --queue=high,default
03Sự kiện việc làmSử 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 Laravelphp artisan queue:work --queue=high,default
04Sử 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 đó |