Antrian Phalcon

Antrian yg dimaksud disini adalah antrian proses data seperti proses video, mengubah ukuran gambar atau mengirim email. Proses kerja seperti ini tidak cocok untuk dijalankan secara online atau secara real time karena dapat memperlambat waktu loading halaman, berdampak pada performa di hadapan pengguna.

Solusi terbaik di sini adalah menerapkan antrian kerja di background. Sebuah aplikasi web harus menempatkan pekerjaan ke dalam antrian dan menunggu untuk diproses.

Meskipun Anda dapat menemukan ekstensi PHP yang lebih canggih untuk mengatasi antrian dalam aplikasi Anda seperti RabbitMQ ; Phalcon menyediakan klien untuk Beanstalk, backend manajemen antrian pekerjaan yg terinspirasi oleh Memcache . Komponen ini sederhana, ringan, dan benar-benar khusus pada antrian pekerjaan.

Menempatkan Job ke dalam Antrian 

Setelah terhubung, Benstalk dapat menyisipkan pekerjaan sebanyak yang dibutuhkan. Pengembang dapat menentukan struktur pesan sesuai dengan kebutuhan aplikasi:

<?php

//Connect to the queue
$queue = new Phalcon\Queue\Beanstalk(array(
    'host' => '192.168.0.21'
));

//Insert the job in the queue
$queue->put(array('processVideo' => 4871));

Pilihan koneksi yang tersedia adalah:

Pilihan Deskripsi Kegagalan
host IP di mana server beanstalk berada 127.0.0.1
port Port koneksi 11300

Dalam contoh di atas, kita menyimpan pesan yang akan membuat proses background untuk mengolah video. Pesan akan segera disimpan dalam antrian dan tidak memiliki batas waktu tertentu.

Opsi tambahan yg tersedia antara lain waktu untuk menjalankan, prioritas dan delay bisa diberikan sebagai parameter kedua:

<?php

//Insert the job in the queue with options
$queue->put(
    array('processVideo' => 4871),
    array('priority' => 250, 'delay' => 10, 'ttr' => 3600)
);

Pilihan yg tersedia:

Pilihan Deskripsi
priority berisi integer < 2^32. Jobs dengan nilai prioritas yang lebih kecil akan dijadwalkan sebelum pekerjaan dengan prioritas yg lebih besar. Prioritas yang paling mendesak adalah 0; prioritas paling belakang adalah 4,294,967,295.
delay berisi adalah angka integer sejumlah detik untuk menunggu sebelum menempatkan pekerjaan dalam antrian yg siap dieksekusi. Pekerjaan akan di “tunda” selama masa ini.
ttr time to run – adalah angka integer detik sbg alokasi waktu untuk menjalankan pekerjaan ini. Waktu ini dihitung dari saat pelaksana tugas mengambil pekerjaan ini.

Setiap perintah untuk memasukan pekerjaan ke dalam antrian mengembalikan “job id” yg dapat digunakan pengembang untuk melacak status pekerjaan:

<?php

$jobId = $queue->put(array('processVideo' => 4871));

Mengambil Pesan 

Setelah pekerjaan ditempatkan ke dalam antrian, pesan tersebut dapat ditangani oleh proses kerja background yang memiliki cukup waktu untuk menyelesaikan tugas:

<?php

while (($job = $queue->peekReady()) !== false) {

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Jobs harus dihapus dari antrian untuk menghindari pemrosesan ganda. Jika beberapa proses kerja background sedang dijalankan, pekerjaan tsb harus “dilindungi” (reserved) untuk menghindari proses yg berulang.

<?php

while ($queue->peekReady() !== false) {

    $job = $queue->reserve();

    $message = $job->getBody();

    var_dump($message);

    $job->delete();
}

Klien menerapkan satu set dasar fitur yang disediakan oleh Beanstalkd tapi cukup untuk membantu Anda untuk membangun aplikasi yg menerapkan antrian.