tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
No Result
View All Result
Home Development

Cara Menggunakan Queue di Laravel: Memproses Tugas Secara Asinkron

Elara Meadowlight by Elara Meadowlight
July 4, 2025
in Development, Laravel, PHP, Queue, Web
0
Share on FacebookShare on Twitter

Laravel, sebagai salah satu framework PHP yang paling populer, menawarkan berbagai fitur yang memudahkan pengembangan aplikasi web. Salah satu fitur yang sangat berguna adalah queue (antrian). Dengan queue, kita dapat memproses tugas-tugas yang memakan waktu secara asinkron, sehingga meningkatkan performa aplikasi dan memberikan pengalaman pengguna yang lebih baik. Artikel ini akan membahas secara mendalam cara menggunakan queue di Laravel untuk memproses tugas secara asinkron, mulai dari konfigurasi hingga contoh implementasi.

Apa Itu Queue dan Mengapa Kita Membutuhkannya di Laravel?

Queue, secara sederhana, adalah sebuah antrian tugas yang akan diproses. Dalam konteks aplikasi web, queue memungkinkan kita untuk mendelegasikan tugas-tugas yang memakan waktu, seperti mengirim email, memproses gambar, atau melakukan perhitungan yang kompleks, ke sebuah proses latar belakang (background process).

Mengapa queue penting?

  • Meningkatkan Performa Aplikasi: Dengan memindahkan tugas-tugas yang memakan waktu ke queue, kita menghindari blokir pada proses utama aplikasi. Pengguna tidak perlu menunggu tugas-tugas tersebut selesai untuk berinteraksi dengan aplikasi.
  • Meningkatkan Respon Time: Aplikasi menjadi lebih responsif karena request pengguna segera direspon tanpa harus menunggu proses yang lama selesai.
  • Memudahkan Skalabilitas: Queue mempermudah skalabilitas aplikasi. Ketika beban aplikasi meningkat, kita dapat menambahkan lebih banyak worker untuk memproses antrian tugas.
  • Meningkatkan Kehandalan: Jika sebuah tugas gagal diproses, queue memungkinkan kita untuk mencoba kembali (retry) tugas tersebut, sehingga meningkatkan kehandalan aplikasi.

Singkatnya, menggunakan queue di Laravel adalah cara yang efektif untuk meningkatkan performa, skalabilitas, dan kehandalan aplikasi.

Related Post

Contoh Project Laravel Open Source: Inspirasi & Referensi Kode

November 30, 2025

Komunitas Laravel Developer Indonesia: Bergabung & Belajar Bersama!

November 30, 2025

Cara Deploy Aplikasi Laravel ke Server: Panduan Lengkap Hingga Website Online

November 30, 2025

Laravel Eloquent Relationship Tutorial Indonesia: Hubungan Antar Tabel dengan Mudah

November 30, 2025

Konfigurasi Queue di Laravel: Mempersiapkan Lingkungan Kerja

Sebelum mulai menggunakan queue di Laravel, kita perlu melakukan konfigurasi terlebih dahulu. Laravel mendukung berbagai driver queue, termasuk database, Redis, Amazon SQS, dan lainnya. Pilihan driver tergantung pada kebutuhan dan infrastruktur aplikasi kita.

Berikut adalah langkah-langkah konfigurasi queue di Laravel:

  1. Pilih Driver Queue: Buka file .env dan tentukan driver queue yang ingin digunakan dengan mengubah nilai QUEUE_CONNECTION. Contoh:

    QUEUE_CONNECTION=redis

    Jika Anda memilih database, pastikan Anda sudah membuat tabel jobs dengan perintah:

    php artisan queue:table
    php artisan migrate

    Jika Anda memilih redis, pastikan Redis sudah terinstal dan berjalan di server Anda.

  2. Konfigurasi Driver: Setiap driver queue memiliki konfigurasi yang berbeda. Konfigurasi driver biasanya terdapat di file config/queue.php. Sesuaikan konfigurasi sesuai dengan kebutuhan Anda. Misalnya, untuk Redis, Anda perlu menentukan host, port, dan database Redis.

    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
  3. Instalasi Package (Optional): Beberapa driver queue, seperti Amazon SQS, mungkin membutuhkan instalasi package tambahan menggunakan Composer. Ikuti petunjuk instalasi yang diberikan oleh dokumentasi driver yang bersangkutan.

Setelah konfigurasi selesai, pastikan konfigurasi sudah benar dengan mencoba menjalankan worker queue (akan dibahas di bagian selanjutnya).

Membuat Job di Laravel: Mendefinisikan Tugas yang Akan Diproses

Setelah konfigurasi queue selesai, langkah selanjutnya adalah membuat job. Job adalah sebuah class yang merepresentasikan tugas yang akan diproses oleh queue.

Untuk membuat job, gunakan perintah Artisan make:job:

php artisan make:job SendWelcomeEmail

Perintah ini akan membuat sebuah file job di direktori app/Jobs. Buka file tersebut dan perhatikan struktur dasar job:

<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Logika untuk mengirim email selamat datang
    }
}
  • ShouldQueue interface menandakan bahwa class ini adalah job yang akan diproses oleh queue.
  • Method __construct() digunakan untuk menerima parameter yang dibutuhkan oleh job.
  • Method handle() adalah tempat kita menulis logika untuk menjalankan tugas yang didefinisikan oleh job.

Contoh: Job untuk mengirim email selamat datang

Misalkan kita ingin membuat job untuk mengirim email selamat datang kepada pengguna baru. Kita dapat menambahkan parameter user ke constructor dan menulis logika pengiriman email di method handle():

<?php

namespace AppJobs;

use AppModelsUser;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesMail;
use AppMailWelcomeEmail;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
    }
}

Pastikan Anda sudah membuat mail class WelcomeEmail dengan perintah php artisan make:mail WelcomeEmail.

Mendorong Job ke Queue: Menambahkan Tugas ke Antrian

Setelah job dibuat, kita perlu mendorong (dispatch) job tersebut ke queue agar dapat diproses. Ada beberapa cara untuk mendorong job ke queue di Laravel.

1. Menggunakan Method dispatch():

Cara paling umum adalah menggunakan method dispatch() yang tersedia di semua class job. Method ini menambahkan job ke queue default.

use AppJobsSendWelcomeEmail;
use AppModelsUser;

// ...

$user = User::find(1);
SendWelcomeEmail::dispatch($user);

2. Menggunakan Helper Function dispatch():

Kita juga dapat menggunakan helper function dispatch() untuk mendorong job ke queue.

use AppJobsSendWelcomeEmail;
use AppModelsUser;

// ...

$user = User::find(1);
dispatch(new SendWelcomeEmail($user));

3. Menentukan Queue:

Kita dapat menentukan queue spesifik tempat job akan ditambahkan menggunakan method onQueue().

use AppJobsSendWelcomeEmail;
use AppModelsUser;

// ...

$user = User::find(1);
SendWelcomeEmail::dispatch($user)->onQueue('emails');

Pastikan Anda sudah membuat queue dengan nama ’emails’ di konfigurasi queue.

4. Mengatur Delay:

Kita juga dapat mengatur delay (waktu tunda) sebelum job diproses menggunakan method delay().

use AppJobsSendWelcomeEmail;
use AppModelsUser;
use CarbonCarbon;

// ...

$user = User::find(1);
SendWelcomeEmail::dispatch($user)->delay(Carbon::now()->addMinutes(5));

Contoh di atas akan menunda pemrosesan job selama 5 menit.

Menjalankan Worker Queue: Memproses Tugas di Latar Belakang

Setelah job didorong ke queue, kita perlu menjalankan worker queue untuk memproses tugas-tugas tersebut. Worker queue adalah sebuah proses yang berjalan di latar belakang dan memantau queue untuk mencari job yang siap diproses.

Untuk menjalankan worker queue, gunakan perintah Artisan queue:work:

php artisan queue:work

Perintah ini akan menjalankan worker untuk queue default. Kita dapat menentukan queue spesifik yang ingin diproses dengan menambahkan opsi --queue:

php artisan queue:work --queue=emails

Untuk menjaga worker tetap berjalan dan memproses job secara terus menerus, kita dapat menggunakan supervisor. Supervisor adalah process manager untuk Linux yang memungkinkan kita untuk memantau dan mengelola proses-proses di latar belakang.

Contoh Konfigurasi Supervisor:

Buat file konfigurasi supervisor di /etc/supervisor/conf.d/laravel-worker.conf dengan isi seperti berikut:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/project/storage/logs/worker.log
stopwaitsecs=3600

Ganti /path/to/your/project dengan path ke project Laravel Anda. numprocs menentukan jumlah worker yang akan dijalankan. Sesuaikan dengan kebutuhan Anda.

Setelah konfigurasi supervisor dibuat, jalankan perintah:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

Mengatasi Kegagalan Job: Retrying dan Logging

Terkadang, sebuah job mungkin gagal diproses karena berbagai alasan, seperti koneksi database yang terputus atau kesalahan kode. Laravel menyediakan mekanisme untuk mengatasi kegagalan job, seperti retrying dan logging.

Retrying Jobs:

Secara default, Laravel akan mencoba kembali (retry) sebuah job yang gagal beberapa kali. Jumlah percobaan dan waktu tunda antar percobaan dapat dikonfigurasi di file config/queue.php.

Kita juga dapat menentukan jumlah percobaan maksimum untuk sebuah job dengan menambahkan property $tries di class job.

<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $tries = 3; // Mencoba kembali 3 kali

    // ...
}

Logging Jobs:

Laravel secara otomatis mencatat (log) informasi tentang job yang gagal ke dalam file log. Kita dapat melihat log untuk mengetahui penyebab kegagalan job dan melakukan perbaikan.

Failed Jobs Table:

Ketika sebuah job mencapai jumlah percobaan maksimum dan masih gagal, job tersebut akan dipindahkan ke tabel failed_jobs. Tabel ini menyimpan informasi tentang job yang gagal, termasuk payload, exception, dan waktu kegagalan.

Kita dapat melihat daftar job yang gagal di tabel failed_jobs menggunakan perintah Artisan:

php artisan queue:failed

Kita dapat mencoba kembali job yang gagal dari tabel failed_jobs menggunakan perintah Artisan:

php artisan queue:retry all

atau berdasarkan ID:

php artisan queue:retry {id}

Penggunaan Queue Groups: Mengelompokkan Tugas untuk Manajemen Lebih Baik

Laravel 8 memperkenalkan fitur queue groups yang memungkinkan kita untuk mengelompokkan job ke dalam grup-grup tertentu. Fitur ini berguna untuk mengelola job yang terkait dengan fitur atau modul tertentu.

Untuk menggunakan queue groups, kita perlu menggunakan Facade Bus. Kita definisikan batch dari jobs yang akan diproses:

use IlluminateSupportFacadesBus;
use AppJobsProcessPodcast;
use AppJobsOptimizePodcast;
use AppJobsPublishPodcast;

Bus::batch([
    new ProcessPodcast($podcast),
    new OptimizePodcast($podcast),
    new PublishPodcast($podcast),
])->dispatch();

Fitur ini sangat berguna untuk memantau progress dari serangkaian job terkait.

Studi Kasus: Implementasi Queue untuk Fitur Upload Gambar

Mari kita lihat studi kasus bagaimana cara menggunakan queue di Laravel untuk fitur upload gambar. Bayangkan sebuah aplikasi web yang memungkinkan pengguna untuk mengupload gambar. Setelah gambar diupload, kita perlu melakukan beberapa proses, seperti:

  1. Membuat thumbnail.
  2. Mengoptimasi ukuran gambar.
  3. Menyimpan gambar ke storage.

Jika kita melakukan semua proses ini secara sinkron, pengguna harus menunggu proses selesai sebelum dapat melanjutkan interaksi dengan aplikasi. Ini akan membuat pengalaman pengguna menjadi buruk.

Dengan menggunakan queue, kita dapat mendelegasikan proses-proses ini ke background process.

Langkah-langkah Implementasi:

  1. Buat Job untuk Proses Gambar: Buat sebuah job bernama ProcessImage dengan perintah php artisan make:job ProcessImage.
  2. Tambahkan Logika Proses Gambar di Method handle(): Di dalam method handle(), tambahkan logika untuk membuat thumbnail, mengoptimasi ukuran gambar, dan menyimpan gambar ke storage.
  3. Dispatch Job ke Queue: Setelah gambar diupload, dispatch job ProcessImage ke queue.

Contoh kode:

<?php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use InterventionImageFacadesImage;
use IlluminateSupportFacadesStorage;

class ProcessImage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $imagePath;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($imagePath)
    {
        $this->imagePath = $imagePath;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Membuat thumbnail
        $thumbnail = Image::make(Storage::path('public/' . $this->imagePath))
            ->fit(200, 200)
            ->save(Storage::path('public/thumbnails/' . basename($this->imagePath)));

        // Mengoptimasi ukuran gambar
        $optimizedImage = Image::make(Storage::path('public/' . $this->imagePath))
            ->encode('jpg', 75);

        // Menyimpan gambar yang dioptimasi
        Storage::put('public/' . $this->imagePath, $optimizedImage->getEncoded());
    }
}

Controller:

use AppJobsProcessImage;
use IlluminateHttpRequest;

class ImageController extends Controller
{
    public function upload(Request $request)
    {
        $request->validate([
            'image' => 'required|image|max:2048',
        ]);

        $imagePath = $request->file('image')->store('images', 'public');

        ProcessImage::dispatch($imagePath);

        return back()->with('success', 'Gambar berhasil diupload. Sedang diproses di background.');
    }
}

Dengan implementasi ini, pengguna dapat langsung melihat pesan sukses setelah gambar diupload, tanpa harus menunggu proses pembuatan thumbnail dan optimasi selesai.

Tips dan Trik Optimasi Queue di Laravel

Berikut beberapa tips dan trik untuk mengoptimasi penggunaan queue di Laravel:

  • Gunakan Driver Queue yang Tepat: Pilih driver queue yang sesuai dengan kebutuhan dan infrastruktur aplikasi Anda. Redis umumnya lebih cepat daripada database.
  • Optimasi Query Database: Pastikan query database di dalam job sudah dioptimasi untuk menghindari bottleneck.
  • Gunakan Caching: Manfaatkan caching untuk menyimpan data yang sering diakses oleh job.
  • Monitor Queue: Pantau kinerja queue secara berkala untuk mengidentifikasi potensi masalah.
  • Limit Ukuran Payload: Hindari mengirim data yang terlalu besar ke queue. Pertimbangkan untuk menyimpan data besar di storage dan hanya mengirim path ke file tersebut ke queue.
  • Gunakan Prioritas Queue: Jika Anda memiliki job yang lebih penting daripada job lainnya, gunakan prioritas queue untuk memastikan job-job penting diproses terlebih dahulu.
  • Implementasikan Rate Limiting: Jika job Anda mengakses API eksternal, implementasikan rate limiting untuk menghindari pemblokiran.

Kesimpulan: Manfaat Menggunakan Queue untuk Aplikasi Laravel Anda

Cara menggunakan queue di Laravel adalah keterampilan penting bagi setiap pengembang Laravel. Dengan memanfaatkan queue, kita dapat meningkatkan performa, skalabilitas, dan kehandalan aplikasi. Queue memungkinkan kita untuk memproses tugas-tugas yang memakan waktu secara asinkron, sehingga memberikan pengalaman pengguna yang lebih baik dan membebaskan sumber daya server. Dengan memahami konsep dan implementasi queue di Laravel, kita dapat membangun aplikasi web yang lebih responsif, efisien, dan handal. Jadi, jangan ragu untuk menggunakan queue di Laravel untuk proyek-proyek Anda selanjutnya!

Tags: Asynchronous TasksBackground JobsJob QueuesLaravelLaravel QueuePerformance OptimizationPHPQueue SystemTask Processingweb development
Elara Meadowlight

Elara Meadowlight

Related Posts

Contoh

Contoh Project Laravel Open Source: Inspirasi & Referensi Kode

by Elara Meadowlight
November 30, 2025
Belajar

Komunitas Laravel Developer Indonesia: Bergabung & Belajar Bersama!

by Elara Meadowlight
November 30, 2025
Deployment

Cara Deploy Aplikasi Laravel ke Server: Panduan Lengkap Hingga Website Online

by Jasper Nightshade
November 30, 2025
Next Post

Cara Membuat Email Template di Laravel: Desain Email yang Profesional

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

Contoh Implementasi AI dalam Bisnis UKM: Studi Kasus dan Peluang Bisnis

June 20, 2025

Contoh Project Web Development Sederhana: Inspirasi dan Tutorial Lengkap

June 12, 2025

Cara Implementasi Authentication di Laravel: Keamanan Website Terjamin

August 1, 2025

Contoh Website Company Profile Sederhana dengan HTML CSS: Inspirasi Desain Modern

July 30, 2025

Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan

June 5, 2026

Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda

June 5, 2026

Training CRM untuk Tim Sales dan Marketing: Tingkatkan Kompetensi dan Produktivitas

June 5, 2026

Harga Software CRM di Indonesia per Bulan: Perbandingan dan Pilihan Terbaik

June 5, 2026

tutwuri

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan
  • Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda
  • Training CRM untuk Tim Sales dan Marketing: Tingkatkan Kompetensi dan Produktivitas

Categories

  • AI
  • Akuntansi
  • Algoritma
  • Alternatif
  • Analisis
  • and separated by commas: Hosting
  • API
  • Aplikasi
  • Asuransi
  • Authentication
  • Backend
  • Bahasa Indonesia
  • Belajar
  • Berita
  • Biaya
  • Bisnis
  • Blog
  • Bootstrap
  • Branding
  • Bulanan
  • Business
  • Cepat
  • Chatbot
  • ChatGPT
  • Cloud
  • CMS
  • Command
  • Contoh
  • CPanel
  • CRM
  • CRUD
  • CSS
  • Data
  • Database
  • Debugging
  • Deployment
  • Desain
  • Design
  • Developer
  • Development
  • Digital
  • Dokumentasi
  • Domain
  • Download
  • Dukungan
  • E-commerce
  • Efektif
  • Efektivitas
  • Efisiensi
  • Email
  • Error
  • Error generating categories
  • Etika
  • Event
  • Excel
  • Fashion
  • File
  • Fitur
  • Fleksibilitas
  • Framework
  • Freelance
  • Frontend
  • Fungsional
  • Gambar
  • Game
  • Garansi
  • Generatif
  • Google
  • Gratis
  • Harga
  • Here are 5 categories
  • Here are 5 categories based on the article titles
  • Hosting
  • HTML
  • Ide
  • Implementasi
  • Indonesia
  • Industri
  • Inovasi
  • Inspirasi
  • Integrasi
  • Investasi
  • Jakarta
  • JavaScript
  • Kapasitas
  • Karir
  • Kasus
  • Keamanan
  • Keandalan
  • Keberhasilan
  • Kebutuhan
  • Kecepatan
  • Kepuasan
  • Kerugian
  • Kesehatan
  • Kinerja
  • Kolaborasi
  • Komunikasi
  • Komunitas
  • Konfigurasi
  • Konstruksi
  • Konten
  • Kota
  • Kreativitas
  • Kualitas
  • Kustomisasi
  • Laporan
  • Laravel
  • Layanan
  • Lokasi
  • Machine Learning
  • Mahasiswa
  • Manajemen
  • Manajemen Proyek
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Media Sosial
  • Migrasi
  • Migration
  • Mobile
  • Model
  • Monitoring
  • Murah
  • Negosiasi
  • Node JS
  • Online
  • Open Source
  • Optimasi
  • Otentikasi
  • Otomatis
  • Otomatisasi
  • Otomotif
  • Panduan
  • Pariwisata
  • Payment Gateway
  • Pekerjaan
  • Pelajar
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemasaran
  • Pemrograman
  • Pemula
  • Pendidikan
  • Pengambilan Keputusan
  • Pengembangan
  • Pengguna
  • Penggunaan
  • Penghasilan
  • Penipuan
  • Penjualan
  • Perbandingan
  • Perbedaan
  • Performa
  • Personalisasi
  • Pertumbuhan
  • Perubahan
  • PHP
  • Pilihan
  • Plugin
  • Portfolio
  • Prediksi
  • Produktivitas
  • Profesional
  • Programmer
  • Promo
  • Prospek
  • Python
  • Queue
  • Rekomendasi
  • Responsive
  • Retensi
  • Review
  • SEO
  • Sertifikat
  • Server
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • SSD
  • SSL
  • Stabilitas
  • Startup
  • Strategi
  • Syarat
  • Tanggung Jawab
  • Tantangan
  • Technology
  • Teknologi
  • Template
  • Terbaik
  • Terbaru
  • Terpercaya
  • Testimoni
  • Tips
  • Tools
  • Traffic
  • Trafik
  • Tren
  • Troubleshooting
  • Tutorial
  • UI
  • UKM
  • Unlimited
  • Upload
  • Uptime
  • using one word per category: Software
  • using only one word from the list provided per category
  • Validasi
  • Video
  • VPS
  • Web
  • Website
  • WordPress

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 tutwuri.

No Result
View All Result
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis

© 2024 tutwuri.