Rumah > rangka kerja php > Laravel > Mari kita bincangkan tentang mekanisme baris gilir Laravel dan fahami senario penggunaan baris gilir.

Mari kita bincangkan tentang mekanisme baris gilir Laravel dan fahami senario penggunaan baris gilir.

青灯夜游
Lepaskan: 2022-03-03 19:55:06
ke hadapan
2607 orang telah melayarinya

Bagaimana untuk menggunakan baris gilir Laravel? Di bawah, lajur tutorial Laravel akan memperkenalkan kepada anda cara menggunakan baris gilir Laravel dan senario untuk menggunakan baris gilir saya harap ia akan membantu anda.

Mari kita bincangkan tentang mekanisme baris gilir Laravel dan fahami senario penggunaan baris gilir.

Kenapa?

Pertama sekali, kita perlu tahu mengapa kita perlu menggunakan baris gilir, dan apa yang akan berlaku jika kita jangan gunakan barisan! Apakah kelebihan dan kekurangan

Kita boleh berikan beberapa contoh senario mudah.

Menghantar e-mel

Apakah masalah biasa yang dihadapi semasa menghantar e-mel ??

  • Penghantaran lambat
  • Gagal menghantar
  • Kekerapan penghantaran terlalu tinggi, ditolak oleh pembekal perkhidmatan atau dimasukkan ke dalam tong sampah

Apakah faedah menggunakan baris gilir?

  • Tingkatkan respons pelanggan

    Apabila menghantar, kami tidak memprosesnya serta-merta, tetapi membuangnya ke pelayan, dan baris gilir diurus dan dijadualkan. Anda boleh menyesuaikan dan memilih untuk menghantar serta-merta atau menangguhkan penghantaran mengikut konfigurasi

  • Tingkatkan toleransi kesalahan

    Semasa proses penghantaran, kami mungkin mendapati sasaran ditolak. Sebagai contoh, kebanyakan orang akan menghadapi senario menghantar ralat 502 ke admin@qq.comn. Dalam senario ini, kita boleh memahaminya sebagai peristiwa Dalam proses penghantaran e-mel, kita boleh mencetuskan dan membina peristiwa berikut

    • Kegagalan penghantaran
    • Rekod e-mel yang disimpan dalam pangkalan data.
    • Pengecualian kod
    • E-mel berjaya dihantar panggil balik
    • Gagal menghantar dan cuba lagi

    Dihantar melalui e-mel ini, ia mungkin Jika berbilang masa- tugas memakan dijana, kita sebenarnya boleh membina berbilang perkhidmatan baris gilir. Setiap baris gilir menguruskan perkaranya sendiri, sangat dipisahkan Mereka

    boleh disediakan dengan sangat baik melalui baris gilir Laravel hantar serta-merta, kelewatan penghantaran, Cuba hantar semula

  • Kekerapan penghantaran boleh dikawal

    Pembangun yang telah menggunakan e-mel yang dihantar secara berkelompok pasti akan menghadapi masalah, iaitu jika kami menghantar terus dalam kelompok, iaitu, menghantar sejumlah besar e-mel pada masa yang sama. Kemudian pembekal perkhidmatan e-mel berkemungkinan menolak e-mel kami atau e-mel masuk ke dalam tong sampah dan diiktiraf sebagai iklan Kemudian, penghantaran tertunda digunakan di sini . , kami boleh mengkonfigurasi kekerapan secara munasabah mengikut mel yang diketahui menunggu penghantaran dalam perkhidmatan baris gilir semasa, atau menukar konfigurasi mel untuk mencapai kekerapan terkawal.

    Sebagai contoh, tetapkan konfigurasi untuk dihantar 10 kali seminit, dsb. Begitu juga, kita boleh mencapai konfigurasi, kawalan frekuensi dan penyahgandingan kawalan penghantaran

yang lain

Sudah tentu kami masih menggunakannya dalam banyak situasi

  • Excel muat turun bahagian pelayan
  • Berbilang tugas tak segerak bahagian pelayan untuk pemprosesan data besar
  • Pemprosesan mesej ralat

Cara menggunakan Laravel Queue

Ini hanyalah senarai arahan penggunaan umum dan cara menggunakannya dengan lebih baik . Kod mungkin tidak berjalan dengan baik, perkara utama ialah memahami logik Kami menggunakan Redis sebagai pemandu di sini

Pemandu ditetapkan kepada Redis

> .env
QUEUE_CONNECTION=redis
> 在 config/queue.php 中可以找到
Salin selepas log masuk

Penciptaan pantas Baris gilir dan tugasan penghantaran

# 创建 任务
php artisan make:job ProcessPodcast
Salin selepas log masuk

Penjanaan automatikapp/Jobs/EmailJob.php

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

    protected $data;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $service = new EmailService();

        // ... 检查当前可用 Mailer
        // 这里你自定义就好了,这个方法中你可以根据你自己的配置,获取到当前可用的配置
        $mailer = $service->getMailer();

        // ... 获取当前要发送的数据
        $data = $this->data;
        
        $service->send($mailer, $data);
    }
}
Salin selepas log masuk

Beberapa operasi biasa

Operasi ini boleh didapati dalam dokumentasi

Hantar Panggilan

# 延迟 2分钟 发送
# 这里使用的是 Crontab 包 (不过 Laravel 自带)
EmailJob::dispatch()->delay(now()->addMinutes(2));

# 立即发送 (不会进入到队列中)
EmailJob::dispatchNow();
Salin selepas log masuk

Baris gilir di sini menggunakan baris gilir defult secara lalai, kami boleh mengubah suainya untuk menentukan perkhidmatan baris gilir

public function __construct(array $data)
{
    # 使用 emailQueue
    $this->onQueue('emailQueue');
    $this->data = $data;
}
Salin selepas log masuk

Tetapkan bilangan percubaan semula sekiranya gagal

# 重试 5 次
public $tries = 5;
Salin selepas log masuk

Tetapkan tamat masa

/**
* 确定任务应该超时的时间
*
* @return \DateTime
*/
public function retryUntil()
{
    return now()->addMinutes(10);
}
Salin selepas log masuk

Mulakan baris gilir kami

Jika onQueue tidak dikonfigurasikan Jika ya, anda boleh mengkonfigurasinya tanpa parameter ---queue

php artisan queue:work --queue=emailQueue
Salin selepas log masuk

Digabungkan dengan Acara untuk dipisahkan

Acara Laravel juga dilaksanakan melalui baris gilir

# 创建 Event
php artisan make:event FailEvent

class FailEvent
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    protected $data;
    protected $tag;

    /**
     * @param array $data 投递的数据
     * @param string $tag 要操作的事情
     */
    public function __construct(array $data, string $tag = 'system')
    {
        $this->data = $data;
        $this->tag = $tag;
    }
}

# 创建 listener 
php artisan make:listener FailListener
class FailListener
{
    /**
    * Handle the event.
    * 
    * @param  object  $event
    * @return void
    */
    public function handle(FailEvent $event)
    {
        $this->{$event->tag}($event->data);
    }

    /**
     * 处理系统异常
     * DateTime: 2021/12/3 11:02 上午
     * @param array $data
     */
    public function system(array $data)
    {

    }

    /**
    * 处理邮件异常
    * DateTime: 2021/12/3 11:02 上午
    */
    public function email()
    {
    
    }

}

# app/Providers/EventServiceProvider.php
protected $listen = [
    FailEvent::class => [
        FailListener::class,
    ],
]

# 投递
event(new FailEvent(['error' = '异常信息'], 'email'));
Salin selepas log masuk

Lain-lain

Sebenarnya, Laravel kebanyakannya membantu saya melaksanakan keseluruhan proses. Anda boleh cuba menggunakan redis untuk melaksanakan baris gilir terkawal sendiri. Kemahiran adalah semua yang anda perlukan untuk menguasai jenis data berkaitan Redis. Berikut ialah senarai ringkas jenis data yang digunakan dalam mod di atas dalam Redis

  • Senarai

    Menggunakannya untuk melengkapkan fungsi baris gilir muncul dan menolak ke dalam tindanan

  • juga boleh disimpan data Pengirim
  • Set Diisih boleh setkan masa kepada The. markah dalam Set Diisih diisih mengikut markah untuk mencari tugas baris gilir yang ingin kami laksanakan baru-baru ini

    Sudah tentu, terdapat banyak lagi kegunaan Redis untuk memenuhi tugasan anda sendiri keperluan.

    Tiada penyelesaian yang sempurna di dunia, hanya penyelesaian yang paling sesuai dengan anda Apabila anda menghadapi masalah di tempat kerja, cuba belajar membuat inferens, menggunakan pelbagai alatan secara munasabah dan reka bentuk penyelesaian untuk mencapainya. Kod itu hanyalah mikrokosmos terakhir Perkara terakhir adalah untuk belajar memahami Setiap bahasa dan setiap rangka kerja hanyalah pelaksanaan penyelesaian. Hanya dengan menguasainya anda tidak dapat dikalahkan. Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila Lawati:

    Pengenalan kepada Pengaturcaraan
    ! !

Atas ialah kandungan terperinci Mari kita bincangkan tentang mekanisme baris gilir Laravel dan fahami senario penggunaan baris gilir.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan