Persiapan:
- Pastikan Framework Yii2 telah terinstall dengan benar. Yii2 yang digunakan dalam contoh ini adalah template basic
- 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:

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:
-
queue/info
untuk melihat status job/task yang ada dalam antrian queue/run
,queue/listen
untuk menjalankan/mengeksekusi task yang ada dalam antrianqueue/clear
menghapus antrianqueue/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

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:
- Create file
yii-queue.service
difolder /etc/systemd/system - 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

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

Contoh program dalam artikel ini dapat dilihat di https://github.com/virbo/tutorial
Sekian tutorial singkat ini, semoga bermanfaat (*)
About the author