Cara Membuat Queue di Framework PHP Laravel

Cara Membuat Queue di Framework PHP Laravel

Di dalam dunia komputer, khususnya dalam struktur data, ada istilah queue atau antrian. Queue merupakan proses penyusunan data agar data yang dikumpulkan sesuai dengan antrian. Penyusunan datanya menggunakan prinsip FIFO (First In First Out), atau seperti antrian di dunia nyata. Misalnya kita antri membeli tiket, maka yang datang pertama akan dilayani pertama kali (First In First Out).

Dalam data struktur FIFO, elemen pertama yang ditambahkan ke dalam antrian menjadi yang pertama akan dihapus. Hal ini menjadi persyaratan untuk menambahkan elemen baru, semua elemen yang ditambahkan sebelumnya harus dihapus sebelum elemen baru dapat dihapus.

Queue memiliki dua kata kunci, tail dan head. Tail merupakan penanda urutan paling belakang dan Head merupakan penanda urutan paling depan. Proses menghapus data paling depan disebut dengan dequeue, dan proseso menambahkan data paling belakang disebut dengan enqueue.

Queue merupakan fitur yang sangat penting dan menarik dari Lumen, kamu dapat menjalankan tasks (background process / cron task) menggunakan queue. Kamu dapat mendorong task masuk ke dalam queue dan sisa pekerjaan akan dilakukan oleh worker. Terkadang kita butuh untuk menjalankan task satu per satu atau sebagian yang akan memproses beberapa data dan mengembalikan proses akhir data sebagai respon. Kamu dapat menggunakan antrian di Lumen secara berkala untuk menjalankan task, cron task dan background script task.

Normalnya kita menggunakan CRON job untuk memanggil tugas secara berkala tetapi terkadang beberapa task jadi gagal karena waktu eksekusi, server response time 500 atau masalah server lainnya. Selanjutnya task akan dijalankan pada waktu yang dijadwalkan, dan proses akan terus dilanjutkan. Namun jika proses gagal tidak akan diulang, jika task yang sudah dijadwalkan gagal.

Module yang bisa digunakan untuk Lumen Queue

  • Beanstalk: Beanstalk merupakan queue yang simpel dan bekerja cepat. Module ini didesain untuk mengurangi latency dari pageview dalam aplikasi web dengan volume yang tinggi dengan menjalankan task yang menghabiskan waktu secara asinkron.

Beberapa file yang akan digunakan:

  • Composer: Gunakan file ini untuk menambahkan beanstalk untuk install sebagai module dependensi.
  • Config/Queue.php: File ini digunakan untuk konfigurasi dari Queue dan drivernya.
  • Controller/sampleController.php: File kontroler ini akan digunakan untuk mengirim task ke jobQueue.
  • Jobs/testQueue.php: File jobs ini bertanggung jawab untuk mem-push task ke dalam antrian menggunakan metode.

Langkah 1

Jalankan update composer dari command line:
D:\lumen_code> composer update

Langkah 2:

Tambahkan konfigurasi pada file config/queue.php, jika kamu tidak memiliki folder cache maka kamu harus membuat folder Config di dalam root dari aplikasi lumen (seperti, lumen_code\Config) dan copy file queue.php dari vendor\laravel\lumen-framework\config dan paste ke dalam folder lumen_code\config. Jadi lokasi file baru akan menjadi lumen_code/config/queue.php. Kamu harus mengupdate file queue.php seperti konfigurasi dibawah ini:

<span class="php"><span class="php-string">'default'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-string">'beanstalkd'</span>,

<span class="php-string">'beanstalkd'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-brackets">[</span>
 <span class="php-string">'driver'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-string">'beanstalkd'</span>,
 <span class="php-string">'host'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-string">'127.0.0.1'</span>,
 <span class="php-string">'queue'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-string">'default'</span>,
 <span class="php-string">'ttr'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-number">3</span><span class="php-number">6</span><span class="php-number">0</span><span class="php-number">0</span>,
 <span class="php-brackets">]</span>,</span>

Kita telah mengganti driver bawaan menjadi driver beanstalkd dan mengupdate konfigurasi driver beanstalkd.

Langkah 3:

Sekarang buat file jobs baru testQueue.php pada folder jobs/. Kita perlu menambahkan kode dibawah ini ke dalam file testQueue.php:

<span class="php"><span class="php-script-tag">&lt;?php</span>

<span class="php-keyword">namespace</span> App\Jobs;

<span class="php-keyword">use</span> App\Jobs\Job;
<span class="php-keyword">use</span> Log;
<span class="php-keyword">use</span> Illuminate\Http\Request;

<span class="php-keyword">class</span> testQueue <span class="php-keyword">extends</span> Job
<span class="php-brackets">{</span>
 <span class="php-keyword">public</span> <span class="php-var">$queue</span>;

<span class="php-comment">/**
 * Create a new job instance.
 *
 * @return void
 */</span>
 <span class="php-keyword">public</span> <span class="php-function">function</span> __construct<span class="php-brackets">(</span><span class="php-var">$data</span><span class="php-brackets">)</span>
 <span class="php-brackets">{</span>
 <span class="php-var">$this</span><span class="php-operator">-</span><span class="php-operator">&gt;</span>queue <span class="php-operator">=</span> <span class="php-var">$data</span><span class="php-brackets">[</span><span class="php-string">'queue'</span><span class="php-brackets">]</span>;
 <span class="php-brackets">}</span>
 <span class="php-comment">/**
 * Execute the job.
 *
 * @param 
 * @return void
 */</span>

<span class="php-keyword">public</span> <span class="php-function">function</span> handle<span class="php-brackets">(</span><span class="php-brackets">)</span> <span class="php-brackets">{</span>
 Log<span class="php-operator">:</span><span class="php-operator">:</span>info<span class="php-brackets">(</span><span class="php-string">'Hello! Queue job '</span><span class="php-operator">.</span><span class="php-var">$this</span><span class="php-operator">-</span><span class="php-operator">&gt;</span>queue<span class="php-operator">.</span><span class="php-string">' is run at start time - '</span><span class="php-operator">.</span><span class="php-function">microtime</span><span class="php-brackets">(</span><span class="php-keyword">true</span><span class="php-brackets">)</span><span class="php-brackets">)</span>;
 <span class="php-brackets">}</span>
<span class="php-brackets">}</span></span>

Sampel di atas juga akan membuat file LOG, yang bisa dilihat pada storage/Log/lumen.log.

Langkah 4:

Kita telah sukses membuat jobs dan membuat metode baru yang akan mengirim task kedalam antrian. Buat metode test_queue() ke dalam file sampleController.php seperti dibawah ini yang akan mendorong task kedalam antrian.

<span class="php"><span class="php-keyword">use</span> Illuminate\Support\Facades\Queue;
<span class="php-keyword">use</span> App\Jobs\testQueue;

<span class="php-keyword">public</span> <span class="php-function">function</span> test_queue<span class="php-brackets">(</span><span class="php-brackets">)</span> <span class="php-brackets">{</span>
 <span class="php-keyword">for</span><span class="php-brackets">(</span><span class="php-var">$i</span><span class="php-operator">=</span><span class="php-number">0</span>; <span class="php-var">$i</span><span class="php-operator">&lt;</span><span class="php-operator">=</span><span class="php-number">1</span><span class="php-number">0</span>; <span class="php-var">$i</span><span class="php-operator">+</span><span class="php-operator">+</span><span class="php-brackets">)</span><span class="php-brackets">{</span>
 Queue<span class="php-operator">:</span><span class="php-operator">:</span>push<span class="php-brackets">(</span><span class="php-keyword">new</span> testQueue<span class="php-brackets">(</span><span class="php-keyword">array</span><span class="php-brackets">(</span><span class="php-string">'queue'</span> <span class="php-operator">=</span><span class="php-operator">&gt;</span> <span class="php-var">$i</span><span class="php-brackets">)</span><span class="php-brackets">)</span><span class="php-brackets">)</span>;
 <span class="php-keyword">echo</span> <span class="php-string">"successfully push"</span>;
 <span class="php-brackets">}</span>
<span class="php-brackets">}</span></span>

 

Jakartawebhosting.com menyediakan layanan PHP Hosting, dengan kecepatan dan stabilitas pusat data dan server yang baik, up time server 99,9%, team support yang siap membantu 24 jam dan biaya langganan yang menarik.

You may also like...