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

Laravel Mail Sending Redirector Listener

Laravel Mail Sending Redirector Listener

Trong quá trình phát triển web, việc gửi email là một chức năng quan trọng để thông báo, đặt lại mật khẩu, hoặc tương tác với người dùng. Tuy nhiên, khi chúng ta đang trong quá trình phát triển, vi...

Laravel Has Many Through Eloquent Relationship

Laravel Has Many Through Eloquent Relationship

Has Many Through Relationship hơi phức tạp để hiểu một cách đơn giản, nó sẽ cung cấp cho chúng ta một con đường tắt để có thể truy cập dữ liệu của một quan hệ xa xôi thông qua một mối quan hệ trung gi...

Laravel 9 REST API With Sanctum Authentication

Laravel 9 REST API With Sanctum Authentication

Laravel Sanctum Laravel Sanctum cung cấp một hệ thống authentication đơn giản cho các SPA, ứng dụng Mobile và API đơn giản sử dụng token. Sanctum cho phép ứng dụng của bạn phát hành các mã token...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Pipeline Design Pattern in Laravel

Pipeline Design Pattern in Laravel

Pipeline Design Pattern là nơi mà các dữ liệu được chuyển qua một chuỗi các nhiệm vụ hoặc giai đoạn. Pipeline hoạt động giống như một chuỗi dây chuyền lắp ráp, nơi dữ liệu được xử lý và sau đó, sẽ...

Implementing Private User Folders with CKFinder in Laravel

Implementing Private User Folders with CKFinder in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

Laravel UI Custom Email Password Reset Template

Laravel UI Custom Email Password Reset Template

Nếu bạn đang dùng thư viện laravel/ui để làm các chức năng liên quan đến authentication, và trong dự án của bạn, bạn cần thay đổi template email password reset thay vì sử dụng template email password...

Send Slack Notifications In Laravel

Send Slack Notifications In Laravel

Slack là gì? Slack là một công cụ giao tiếp tại nơi làm việc, "một nơi duy nhất cho các tin nhắn, công cụ và file." Điều này có nghĩa là Slack là một hệ thống nhắn tin tức thì với nhiều plug-in cho...

Generate PDF with Header and Footer on every page in Laravel

Generate PDF with Header and Footer on every page in Laravel

Hôm nay, trong bài viết này mình sẽ chia sẻ với các bạn cách dompdf mà header và footer sẽ được hiển thị ở tất cả các trang. Đây cũng là một vấn đề khá phổ biến, khi chúng ta phát triển các tính năng...

ManhDanBlogs