Menguruskan Baris Laravel Kerja Dengan Beanstalk dan Supervisor di Ubuntu 16.04

Beanstalk adalah barisan kerja yang pantas dan sederhana. Ia membolehkan anda menjalankan tugas memakan masa secara serentak, seperti menghantar e-mel, menyambung ke API luaran atau memproses imej. Dengan berbuat demikian, anda akan mengurangkan kependaman aplikasi web anda. Laravel memberikan sokongan luar kotak untuk beanstalkd.

Dalam tutorial ini, kami akan memasang beanstalkd, menyediakan demo aplikasi Laravel dan menguruskan pekerja barisan melalui Penyelia . Aplikasi demo akan mendapat senarai OS yang tersedia dari API Vultr dan memilihnya secara rawak.

Diandaikan bahawa anda sudah mempunyai Penyelia yang terpasang di sistem anda. Sekiranya anda tidak melakukannya, anda perlu membaca tutorial berikut mengenai bagaimana untuk menyedia Penyelia: Memasang dan Mengkonfigurasi Penyelia di Ubuntu 16.04

Juga diandaikan bahawa anda mempunyai akses SSH ke instance Vultr anda.

Memasang Beanstalk

Langkah pertama yang perlu diambil ialah memasang beanstalkd.

sudo apt-get update
sudo apt-get install beanstalkd

Mulakan perkhidmatan.

sudo systemctl start beanstalkd

Anda juga boleh mengaktifkan perkhidmatan bermula pada permulaan sistem.

sudo systemctl enable beanstalkd

Periksa status perkhidmatan dengan mengeluarkan arahan berikut.

sudo systemctl status beanstalkd

Secara lalai, beanstalkdmendengar di port 11300. Beanstalk menggunakan protokol berasaskan teks ringkas yang diterangkan dalam repositori github itu . Anda boleh menguji protokolnya dengan berjalan telnet.

telnet localhost 11300

Tuliskan yang berikut dan tekan ENTER.

list-tubes

Anda harus melihat senarai tabung yang terdapat di pelayan:

OK 14
---
- default

Untuk menutup sambungan, cukup ketik quitdan kemudian tekan ENTER.

Tiub di Beanstalk mewakili barisan kerja. Beanstalk terdiri pada dasarnya oleh pengeluar , pengguna , pekerjaan dan tiub . Pengeluar memasukkan pekerjaan ke dalam tabung untuk dimakan (diproses) oleh sebilangan besar pengguna. Perhatikan bahawa kedua-dua pengeluar dan pengguna hanyalah pelanggan dari pelayan Beanstalk dan benar-benar bebas antara satu sama lain. Dalam istilah praktikal ini bermakna dengan menggunakan Beanstalk anda boleh menghasilkan pekerjaan anda dalam aplikasi PHP anda dan memprosesnya dalam aplikasi NodeJS misalnya. Nasib baik, Laravel menyusun semua ini dan memberi kita API yang sangat mudah untuk menghantar dan menangani pekerjaan, seperti yang akan kita lihat selanjutnya.

Contoh projek

Untuk membina projek contoh kami, kami perlu memasang dependencies. Kami akan memasang PHP dan Komposer.

sudo apt-get install php php-mbstring php-xml php-common php-zip composer

Sekarang, buat projek berdasarkan Laravel 5.5.

composer create-project --prefer-dist laravel/laravel vultr "5.5.*"

Di cdsebelah folder yang baru dibuat. Kami akan bekerja di direktori ini mulai sekarang. Folder ini boleh dirujuk kemudian sebagai PROJECT_ROOT.

cd vultr/

Untuk menggunakan Beanstalk di Laravel kita perlu memasang satu lagi kebergantungan, pelanggan PHP Beanstalk.

composer require pda/pheanstalk ~3.0

Kami juga perlu membuat representasi Kerja. Di Laravel, ini adalah kelas di dalam app/Jobsfolder. Laravel mempunyai perintah konsol untuk membantu kami membuat kelas Kerja. Mari buat Job sampel kami.

php artisan make:job FindFavoriteOS

Kemas kini app/Jobs/FindFavoriteOS.phpfail ke yang berikut.

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class FindFavoriteOS implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $rawData = file_get_contents('https://api.vultr.com/v1/os/list');
        $list = json_decode($rawData, true);
        shuffle($list);
        $key = array_rand($list);
        $favorite = $list[$key];
        Log::info('My Favorite OS is: ' . $favorite['name']);
    }
}

Kaedah pengendalian adalah apa yang akan dilaksanakan dengan berkesan apabila kerja dimakan. Di sini, kami mengambil data dari API Vultr, secara rawak memilih OS dan menulis OS yang dipilih untuk fail log. Fail log terletak di storage/logs/laravel.log.

Kami telah memasang Beanstalk dan menamakan Job yang akan dilaksanakan olehnya. Kini sudah tiba masanya untuk memberitahu Laravel menggunakan Beanstalk sebagai giliran kerja lalai. Salin .envfail lalai yang disediakan oleh pemasangan Laravel.

cp .env.example .env

Sekarang buka .envfail dan kemas kini garis di mana pemandu beratur ditentukan.

QUEUE_DRIVER=beanstalkd

Akhir sekali, buat kunci aplikasi.

php artisan key:generate

Kami kini bersedia untuk menghantar pekerjaan ke barisan kerja Beanstalk.

Menghantar dan menjalankan pekerjaan

Pengiriman pekerjaan di Laravel agak mudah. Kemas kini routes/web.phpfail.

<?php

Route::get('/', function () {
    for ($i = 0; $i < 50; $i++) {
        \App\Jobs\FindFavoriteOS::dispatch();
    }

    return '50 Jobs dispatched!';
});

Walaupun tidak disyorkan untuk menjalankan pelayan yang disediakan dalam pengeluaran, kami akan menggunakannya di sini untuk tujuan ringkas.

php artisan serve --host 0.0.0.0 --port 8000

Sekarang dalam penyemak imbas web, arahkan ke http://[vultr-instance-ip]:8000. Anda akan melihat mesej berikut.

50 Jobs dispatched!

Buka sambungan SSH baru ke pelayan anda dan di dalam akar projek kami, laksanakan perkara berikut.

php artisan queue:work --once

Ini adalah output yang diharapkan:

[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed:  App\Jobs\FindFavoriteOS

Sahkan log telah dijana.

cat storage/logs/laravel.log

Mengatur Penyelia

Untuk mengelakkan keperluan memproses antrian secara manual, kami akan menggunakan supervisord. Buat konfigurasi program berikut di /etc/supervisor/conf.d/vultr.conf.

[program:vultr]
process_name=%(program_name)s_%(process_num)02d
command=php [PROJECT_ROOT]/artisan queue:work
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/worker.log

Perhatikan bahawa laluan yang betul untuk meletakkan fail konfigurasi Supervisor bergantung pada persediaan anda. Juga, ingatlah untuk mengganti [PROJECT_ROOT]dengan jalan penuh ke PROJECT_ROOTsistem anda.

Di sini kita sedang mengkonfigurasi Penyelia untuk secara automatik mula memproses barisan dan, sekiranya pemecahan skrip, untuk memulakannya semula. Perhatikan juga bahawa kita tidak menamakan seorang pekerja tunggal, tetapi 8 proses. Anda bebas untuk membuat contoh tetapi banyak proses yang anda dapati bergantung pada permohonan anda.

Untuk membolehkan Penyelia menguruskan pekerja kami, paksa untuk membaca semula konfigurasinya.

sudo supervisorctl reread
sudo supervisorctl update

Sekiranya perkhidmatan Penyelia belum dimulakan, anda mesti memulakannya.

sudo systemctl start supervisord

Sekarang mari kita lihat apakah kerja sedang diproses.

tail -f storage/logs/laravel.log

Pada penyemak imbas web, navigasi ke http://[vultr-instance-ip]:8000. Anda akan melihat log dihasilkan di konsol anda.

Kesimpulannya

Kami telah berjaya mengkonfigurasi aplikasi Laravel untuk menggunakan Beanstalk sebagai barisan kerja. Juga, kami menunjukkan cara menggunakan Penyelia untuk mengurus pekerja.



Leave a Comment

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut