Worker
Library yang bertugas menjalankan aksi-aksi aplikasi di background.
Instalasi
Jalankan perintah di bawah di folder aplikasi:
mim app install lib-worker
penggunaan
Module ini menambahkan satu library umum dengan nama LibWorker\Library\Worker
yang bisa digunakan untuk memenej jobs.
use LibWorker\Library\Worker;
$name = 'my-job';
$router = ['siteHome', ['param1'=>12], ['query1'=>12]];
$data = ['name'=>'lorem'];
$time = time() + 3600;
$queue = 'job-1';
Worker::add($name, $router, $data, $time, $queue);
Semua aktifitas worker dijalankan melalui cli, untuk itu perlu menambahkan konten seperti di bawah pada cronjob anda:
* * * * * cd /path/to/app/dir/ && php index.php worker start
Atau jika cli mim terpasang, bisa juga dengan perintah:
* * * * * cd /path/to/app/dir/ && mim app worker start
Method
addMany(array $data): bool
Menambah beberapa worker sekaligus. Fungsi ini akan melewati data yang sudah
ada di databse. Masing-masing array item harus memiliki properti yang sama persis
dengan data pada method add:
$data = [
[
'name' => 'x',
'router' => ['x', []],
'data' => [],
'time' => [],
'queue' => 'x'
],
...
];
add(string $name, array $router, array $data, int $time, ?string $queue = null): ?bool
Menambahkan satu worker dengan parameter sebagai berikut:
$nameNama worker.$routerParameter untuk membuat router yang akan dipanggil.$dataData yang akan dikirim ke router.$timeWaktu job akan dijalankan.$queueNama antrian
Sebagai catatan, jika job dengan nama yang sama sudah pernah ada, fungsi ini
akan mengembalikan nilai false.
Tidak ada job yang dijalankan secara bersamaan dengan nilai queue yang sama
kecuali nilai tersebut adalah null.
get(string $name): ?object
Mengambil informasi details suatu job. Fungsi ini akan mengembalikan objek dengan bentuk seperti berikut:
stdClass Object
(
[id] => 5
[name] => my-job
[queue] => my-queue
[router] => Array
(
[0] => siteHome
[1] => stdClass Object
(
[param1] => 12
)
[2] => stdClass Object
(
[query1] => 12
)
)
[data] => stdClass Object
(
[name] => lorem
)
[time] => 2019-02-19 13:58:18
[created] => 2019-02-19 05:58:18
)
exists(string $name): ?bool
Fungsi untuk mengecek jika suatu job sudah terdaftar.
remove(string $name): ?bool
Menghapus job yang sudah terdaftar.
Konfigurasi
Di bawah ini adalah konfigurasi umum worker.
return [
// ...
'libWorker' => [
'concurency' => 10,
'pidFile' => 'etc',
'phpBinary' => 'php',
'keepResponse' => true
]
// ...
];
concurencyTotal worker yang akan dijalankan untuk mengerjakan job.pidFileFolder penyimpanan pid file.phpBinaryPath ke php-cli jika php tidak tersedia di PATH OS.keepResponseMenyimpan semua execution log pada tableworker_result.
Jika melakukan perubahan pada aplikasi setelah worker berjalan, maka pastikan untuk merestart worker agar konfig tersebut digunakan.
Handler Response
Masing-masing router yang akan digunakan untuk menangani worker, harus mengembalikan data dengan bentuk JSON dalam bentuk seperti di bawah:
{
"error": false,
"data": "mixed",
"delay": 60
}
Worker akan dipending dan dijalankan ulang jika router pekerja:
- Mengembalikan empty string
- Mengembalikan data yang tidak bisa di
json_decode. - Nilai
erroradalahtrue.
Jika nilai yang dikembalikan oleh pekerja adalah error: true, maka job tersebut akan dijalankan lagi
1 menit kemudian. Pekerja bisa menentukan delay job akan dijalankan lagi dengan mengeset properti delay
dalam satuan detik.