Quay lại
Catchable queued closures trong Laravel 8

Một trong những tính năng hữu ích nhất của Laravel là khả năng gửi các Closure tới queues. Điều này là do không phải lúc nào bạn cũng cần tạo một job class cho các tasks đơn giản như gửi email.

Vì vậy, ví dụ, chúng ta muốn dispatch email sending đến queue, chúng ta có thể làm như này.

$user = App\User::find(1);

dispatch(function () use ($user) {
    Mail::to($user->email)->send(new \App\Mail\OrderShipped);
});

Bây giờ, đây đã là một tính năng hay nhưng nó lại thiếu một điều quan trọng. Khả năng bắt lỗi nếu có sự cố xảy ra trong khi thực hiện các lần queued closures.

catch method

Laravel 8 cố gắng giải quyết vấn đề này bằng cách thêm khả năng này bằng cách sử dụng phương thức catch mới có thể được sử dụng trên dispatch method. Phương thức chấp nhận một Closure sẽ được thực thi nếu queued Closure fails sau khi sử dụng hết tất cả các lần thử lại được định cấu hình của hàng đợi của bạn được xác định bởi retry_after trên queue driver’s configuration trong tệp config/queue.php của bạn.

Vì vậy, ví dụ trước có thể được viết lại với catch như sau.

use Throwable;

dispatch(function () use ($podcast) {
    Mail::to($user->email)->send(new \App\Mail\OrderShipped);
})->catch(function (Throwable $e) {
    // This job has failed...
});

Như bạn có thể biết, catch Closure nhận instance của interface Throwable có thể được sử dụng để xác định lỗi xảy ra trong quá trình thực thi của Closure trong hàng đợi.

Điều này đặc biệt hữu ích trong việc ghi thông tin ngoại lệ vào tệp logs hoặc dịch vụ bên ngoài để biết điều gì đã dẫn hàng đợi đến trạng thái không thành công.

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday