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;

Worker::add($name, $router, $data, $time);

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' => [] ],
    ...
];

add(string $name, array $router, array $data, int $time): ?bool

Menambahkan satu worker dengan parameter sebagai berikut:

  1. $name Nama worker.
  2. $router Parameter untuk membuat router yang akan dipanggil.
  3. $data Data yang akan dikirim ke router.
  4. $time Waktu job akan dijalankan.

Sebagai catatan, jika job dengan nama yang sama sudah pernah ada, fungsi ini akan mengembalikan nilai false.

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
    [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,
        'phpBinary' => 'php',
        'keepResponse' => true
    ]
    // ...
];
  1. concurency Total worker yang akan dijalankan untuk mengerjakan job.
  2. phpBinary Path ke php-cli jika php tidak tersedia di PATH OS.
  3. keepResponse Menyimpan semua execution log pada table worker_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:

  1. Mengembalikan empty string
  2. Mengembalikan data yang tidak bisa di json_decode.
  3. Nilai error adalah true.

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.