Phiên bản Laravel 8 đã được phát hành với một tính năng mà rất nhiều người trong chúng ta đã chờ đợi rất lâu đó là Jobs Batching, nó cho phép chúng ta thực hiện nhiều công việc trong cùng một lúc và theo dõi chúng thực hiện khi có bất kì lỗi nào xảy ra.

Đầu tiên, bạn hãy chạy các lệnh sau để tạo bảng job_batches để chứa các thông tin về job batches

php artisan queue:batches-table
php artisan migrate

Tìm batch bằng ID

Để truy xuất batch theo ID, bạn có thể dụng facade Bus với method findBatch

$batch = Bus::findBatch("909db655-ed38-4739-89ea-ca6c1b13a5a0")

Callbacks

Bus::batch() cung cấp một số chức năng dưới dạng callbacks:

+ then: khi công việc thực hiện thành công

+ catch: khi công việc thực hiện không thành công

+ finally: khi công việc kết thúc

$batch = Bus::batch([
    // jobs here
])->then(function (Batch $batch) {
    info('Batch ['.$batch->id.'] has been finished succesfully');
})->catch(function (Batch $batch, Throwable $e) {
    info('Batch ['.$batch->id.'] failed to process all jobs');
})->finally(function (Batch $batch) {
    info('Batch ['.$batch->id.'] finished proccessing');
})->dispatch();

Batch Object là tập hợp các thuộc tính rất hay cung cấp cho chúng ta các thông tin cần thiết về batch và những gì đang xảy ra đối với các job của batch.

{
    id: "941eaf3c-7e03-4861-92b9-49713402b9e4",
    name: "",
    total_jobs: 0,
    pending_jobs: 0,
    failed_jobs: 0,
    failed_job_ids: "[]",
    options: "a:0:{}",
    cancelled_at: null,
    created_at: 1628595099,
    finished_at: null
}

Bây giờ, sau khi khám phá tính năng, chúng ta hãy làm một ví dụ để hiểu rõ về job batches hơn

Đầu tiên, chúng ta tạo phải job có nhiệm vụ là thêm data giả vào bảng users, để tạo job bạn hãy chạy lệnh command sau

php artisan make:job CreateUserJob

Tiếp theo, bạn hay mở file CreateUserJob.php nằm trong thư mục app/Jobs và chỉnh sửa như sau

<?php

namespace App\Jobs;

use Illuminate\Bus\Batchable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class CreateUserJob implements ShouldQueue
{
    use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \App\Models\User::factory(10)->create();
    }
}

Lưu ý, khi bạn sử dụng job batches, bạn cần sử dụng thêm facade bên dưới, mặc định khi tạo job facade bên dưới không được thêm vào

use Illuminate\Bus\Batchable;

Kiểm tra hoạt động Laravel Job Batches

Trong bước này, chúng ta cần thêm một controller để thực hiện job trên.

Để làm được điều này, bạn hãy chạy lệnh command sau

php artisan make:controller TestQueueJobController

Tiếp theo, bạn hãy mở TestQueueJobController và chỉnh sửa như sau

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Jobs\CreateUserJob;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use Throwable;

class TestQueueJobController extends Controller
{
    /**
    * Test Job Batches
    **/
    public function run()
    {
        $batch = Bus::batch([
            new CreateUserJob(),
            new CreateUserJob()
        ])->dispatch();
    }
}

Tiếp theo, bạn mở routes/web.php và thêm dòng bên dưới vào

Route::get('job-batches', [App\Http\Controllers\TestQueueJobController::class,'run']);

Sau đó, bạn hãy mở trình duyệt và truy cập vào url /job-batches để thực hiện công việc thêm user.

Sau khi một công việc được thực hiện, bạn cần xử lý queue, đối với điều này, bạn cần sử dụng lệnh command sau

php artisan queue:work

Cuối cùng, khi công việc thực hiện xong, bạn sẽ có thêm 20 user mới trong bảng users.

Như vậy, chúng ta đã thực hiện xong một ví dụ đơn giản về Laravel Queue, tôi hy vọng hướng dẫn của tôi sẽ giúp ích cho công việc của bạn. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Integrating elFinder into TinyMCE 6 in Laravel

Integrating elFinder into TinyMCE 6 in Laravel

TinyMCE TinyMCE là một trình soạn thảo WYSIWYG được xây dựng trên nền tảng Javascript, được phát triển dưới dạng mã nguồn mở theo giấy phép MIT bởi Tiny Technologies Inc. TinyMCE cho phép người d...

Laravel Model

Laravel Model

Model là gì? Trong mô hình MVC, chữ “M” viết tắt là Model, Model dùng để xử lý logic nghiệp vụ trong bất kì ứng dụng dựa trên mô hình MVC. Trong Laravel, Model là lớp đại diện cho cấu trúc logic và...

Laravel Controllers

Laravel Controllers

Trong mô hình MVC, chữ "C" là từ viết tắt của Controller và nó đóng vai trò rất quan trọng để phân tích các logic business. Khi người dùng truy cập vào trình duyệt, nó sẽ đi đến route đầu tiên, sau đó...

Cloudflare's Turnstile CAPTCHA in Laravel

Cloudflare's Turnstile CAPTCHA in Laravel

Ngày 28/09/2022, Cloudflare đã thông báo về phiên bản beta mở của Turnstile, một giải pháp thay thế vô hình cho CAPTCHA. Bất kỳ ai, ở bất kỳ đâu trên Internet muốn thay thế CAPTCHA trên trang web c...

Laravel One to Many Polymorphic Relationship

Laravel One to Many Polymorphic Relationship

One to Many Polymorphic Model Relationship được sử dụng khi một model thuộc về nhiều model khác trên một model kết hợp duy nhất. Ví dụ: Nếu chúng ta có bảng post và video, cả hai đều cần thêm hệ thống...

Simplify Your Laravel Workflow with Laravel Pint

Simplify Your Laravel Workflow with Laravel Pint

Laravel Pint là gì? Laravel Pint là một công cụ sửa đổi mã nguồn của bạn để mã nguồn của bạn tuân thủ theo các tiêu chuẩn. Nói một cách khác, Laravel Pint sẽ quét toàn bộ mã nguồn của bạn, phát...

Google Drive as Filesystem in Laravel

Google Drive as Filesystem in Laravel

Đối với một số dự án, bạn cần phải sử dụng Google Drive (với tài khoản @gmail.com cá nhân hoặc tài khoản G Suite) làm nhà cung cấp bộ nhớ trong các dự án Laravel. Trong bài đăng này, tôi sẽ hướng d...

Csv import with Validation for Laravel

Csv import with Validation for Laravel

Trong một bài viết lúc trước, mình đã chia sẻ đến các bạn cách xây dựng một service import và export CSV sử dụng Facades, nếu có bạn nào không biết hoặc đã quên các bạn có thể tham khảo lại bài viết t...

Laravel CKEditor 5 Image Upload

Laravel CKEditor 5 Image Upload

CKEditor 5CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

ManhDanBlogs