Implementasi yii2-queue

ByYusuf Ayuba

Implementasi yii2-queue

Persiapan:

  1. Pastikan Framework Yii2 telah terinstall dengan benar. Yii2 yang digunakan dalam contoh ini adalah template basic
  2. Install yii2-queue dari repository yiisoft

Tahap installasi yii2-queue

Install yii2-queue melalui composer

composer require --prefer-dist yiisoft/yii2-queue

Karena kita akan membuat script yang jalan di console, maka edit file config/console.php, tambahkan konfigurasi dibawah ini

<?php
...
return [
    'bootstrap' => [
        'queue', // The component registers its own console commands
    ],
    'components' => [
        'queue' => [
            'class' => \yii\queue\file\Queue::class,
            'path' => '@runtime/queue',
        ],
    ],
];

Hal utama yang harus diperhatikan adalah bagian driver yang digunakan. Yii-queue support berbagai driver yang dapat digunakan seperti DB, Redis, RabbitMQ, Beanstalk and Gearman.

Implementasi yii2-queue dalam code

Sebelumnya, buatlah folder components/helpers didalam folder root aplikasi sehingga struktur folder aplikasi menjadi seperti gambar dibawah ini:

Struktur folder
Struktur folder

Kemudian didalam folder helpers buatlah file DownloadJob.php yang isinya seperti ini

<?php

namespace app\components\helpers;

use yii\base\BaseObject;

class DownloadJob extends BaseObject implements \yii\queue\JobInterface
{
    public $url;

    public $path;

    public function execute($queue)
    {
        file_put_contents($this->path, file_get_contents($this->url));
    }
}

Lalu buatlah file JobQueueController.php didalam folder comands dengan code seperti ini

<?php

namespace app\commands;

use Yii;
use yii\console\Controller;

use app\components\helpers\DownloadJob;

class JobQueueController extends Controller
{
    public function actionIndex(){
        Yii::$app->queue->push(new DownloadJob([
            'url' => 'https://s3-id-jkt-1.kilatstorage.id/cdn-dutainformasi/assets/img/logo.png',
            'path' => Yii::getAlias('@runtime/logo-download.png')
        ]));
    }
}

Code diatas berfungsi melakukan download file logo.png yang ada di cloud storage lalu kemudian disimpan dalam folder runtime dengan nama logo-download.png

Running Program

Perintah/Command yang terdapat dalam yii2-queue adalah sebagai berikut:

  1. queue/info untuk melihat status job/task yang ada dalam antrian
  2. queue/run, queue/listen untuk menjalankan/mengeksekusi task yang ada dalam antrian
  3. queue/clear menghapus antrian
  4. queue/remove [id] menghapus task yang ada dalam antrian

Untuk menjalankan contoh program diatas, dapat dilakukan melalui CLI/Comman prompt dengan perintah:

php yii job-queue

Untuk melihat task dalam antrian, ketikkan perintah

php yii queue/info
Queue info
Queue info

Untuk mengeksekusi task dalam antrian tersebut, ketikkan perintah

php yii queue/run

Jika tidak ada yang error, file hasil download dapat dilihat dalam folder runtime.

Service Workers

Ada tiga cara untuk memproses secara otomatis task dalam antrian yaitu melalui Supervisor, Systemd dan Cron. Dari ketika cara ini, kita akan menggunakan dua cara yaitu Systemd dan Cron.

Cron

Cara yang termudah untuk mengeksekusi secara otomatis task dalam antrian adalah dengan Crontab. Kita cukup memasukkan perintah dibawah ini agar proses antrian dapat dieksekusi secara otomatis

* * * * * /usr/bin/php /var/www/my_project/yii queue/run

Sysmtemd

Berbeda dengan Cron, untuk menggunakan Systemcd, kita harus membuat file baru di folder /etc/systemd/system. Ikuti langka-langkah berikut:

  1. Create file yii-queue.service difolder /etc/systemd/system
  2. Pastekan code berikut ke file tsb

Setelah itu, reload systemctl dengan perintah

systemctl daemon-reload

Mengaktifkan service secara otomatis setelah server direstart

systemctl enable yii-queue.service

Untuk mengaktifkan service ketikkan perintah

systemctl start yii-queue

Untuk melihat status apakah service kita berhasil di running atau tidak ketikkan perintah

system status yii-queue
Status service running
Status service running

Perintah status ini juga sekaligus akan menampilkan apakan queue kita berhasil dieksekusi atau tidak.

Status service sekaligus status hasil eksekusi queue
Status service sekaligus status hasil eksekusi queue

Contoh program dalam artikel ini dapat dilihat di https://github.com/virbo/tutorial

Sekian tutorial singkat ini, semoga bermanfaat (*)

About the author

Yusuf Ayuba administrator

1 Comment so far

alfian naufalPosted on8:08 pm - Oct 2, 2019

mas tanya bisakah queue di jalankan langsung dari controller jadi misal kita after save langsung jalan queue nya tanpa php yii queue/run di console

Leave a Reply

%d bloggers like this: