Rumah > rangka kerja php > YII > teks badan

Baris Gilir Mesej dalam Rangka Kerja Yii: Melaksanakan Pemprosesan Asynchronous

PHPz
Lepaskan: 2023-06-21 08:50:10
asal
1956 orang telah melayarinya

Dengan pempopularan Internet dan perkembangan teknologi yang berterusan, jumlah data dan kerumitan perkhidmatan terus meningkat Untuk meningkatkan prestasi dan kelajuan tindak balas sistem, pemprosesan tak segerak telah menjadi teknik yang digunakan secara meluas bermakna. Dalam pembangunan PHP, baris gilir mesej adalah salah satu alat penting untuk melaksanakan pemprosesan tak segerak. Rangka kerja Yii juga menyediakan sistem baris gilir mesej yang lengkap Artikel ini akan memperkenalkan secara terperinci cara menggunakan baris gilir mesej untuk melaksanakan pemprosesan tak segerak dalam rangka kerja Yii.

1. Konsep dan aplikasi baris gilir mesej

Baris gilir mesej ialah kaedah penyimpanan mesej masuk dahulu (FIFO) Pengeluar mesej menghantar mesej ke baris gilir , dan pengguna mesej Atau anda boleh mendapatkan mesej daripada baris gilir dan memprosesnya. Apabila pemprosesan mesej mengambil masa yang lama atau pemprosesan memakan banyak masa dan sumber, baris gilir mesej boleh digunakan untuk memproses mesej secara tidak segerak dan mengelak daripada menyekat perjalanan utas utama Dengan meletakkan tugas ke dalam baris gilir terlebih dahulu, pemprosesan tugas boleh dikurangkan dan tindak balas, dengan itu meningkatkan kelajuan tindak balas dan keupayaan pemprosesan sistem.

Baris gilir mesej mempunyai pelbagai senario aplikasi, seperti:

  1. Transkod dan pemampatan gambar, video dan fail lain
  2. ETL (Ekstrak, Transform , Load) proses, iaitu pengumpulan data, pembersihan dan import
  3. Perkhidmatan push mesej; penjanaan laporan dan tugasan lain .
  4. 2. Baris gilir mesej dalam rangka kerja Yii
  5. Dalam rangka kerja Yii, sistem baris gilir mesej yang lengkap disediakan, termasuk bahagian penghantaran dan penggunaan mesej. Kita boleh menggunakan komponen baris gilir yang disediakan oleh rangka kerja Yii atau sambungan pihak ketiga (seperti yii-queue, Beanstalkd, dll.) untuk melaksanakan fungsi baris gilir mesej.

Komponen baris gilir terbina dalam rangka kerja Yii

    Komponen baris gilir terbina dalam rangka kerja Yii menyediakan set lengkap proses pemprosesan baris gilir mesej. Dalam rangka kerja Yii, menggunakan komponen baris gilir untuk melaksanakan baris gilir mesej memerlukan langkah berikut:
Buat kelas pemprosesan mesej

    Kami boleh mencipta kelas pemprosesan mesej dan melaksanakan Antara muka boleh gilir untuk menentukan proses pemprosesan mesej. Contohnya, kami mencipta kelas pemprosesan mesej bernama ExportTask, melaksanakan antara muka Boleh Gilir dan melaksanakan proses pemprosesan tugas khusus dalam kaedah proses:
  1. use yiiqueueQueueable;
    
    class ExportTask implements Queueable
    {
        public $data;
    
        public function __construct($data)
        {
            $this->data = $data;
        }
    
        public function handle($queue)
        {
            // 处理导出任务
            // $this->data包含导出所需的参数和数据
        }
    }
    Salin selepas log masuk
Hantar mesej

    Jika mesej perlu dihantar, hubungi kaedah Yii::$app->queue->push untuk menghantar mesej ke baris gilir:
  1. Yii::$app->queue->push(new ExportTask(['file' => 'export.xlsx', 'data' => $data]));
    Salin selepas log masuk
    Salin selepas log masuk
Konfigurasikan komponen baris gilir

    Konfigurasikan komponen baris gilir dalam fail konfigurasi aplikasi (biasanya config/console.php):
  1. return [
        // ...
        'components' => [
            // ...
            'queue' => [
                'class' => yiiqueueedisQueue::class,
                'redis' => [
                    'class' => yiiedisConnection::class,
                    'hostname' => '127.0.0.1',
                    'port' => 6379,
                    'database' => 0,
                ],
                'channel' => 'queue',
            ],
            // ...
        ],
        // ...
    ];
    Salin selepas log masuk
  2. Dalam konfigurasi di atas, kami menggunakan redis sebagai storan baris gilir mesej dan juga menggunakan redis sebagai cache dalam storan rangka kerja Yii, dengan itu mengurangkan penggunaan sumber sistem.

Mulakan proses penggunaan

    Gunakan arahan konsol yang disediakan oleh rangka kerja Yii untuk memulakan proses penggunaan:
  1. yii queue/listen
    Salin selepas log masuk
  2. Selepas permulaan, proses penggunaan akan berjalan di latar belakang dan mendengar mesej dalam baris gilir dan diproses.

Di atas ialah langkah asas untuk melaksanakan baris gilir mesej menggunakan komponen baris gilir terbina dalam rangka kerja Yii. Perlu diingatkan bahawa kaedah penyimpanan mesej yang disokong oleh komponen baris gilir terbina dalam rangka kerja Yii termasuk pangkalan data, fail, dsb. sebagai tambahan kepada redis Untuk pelaksanaan khusus, sila rujuk dokumentasi rasmi.

Penggunaan sambungan pihak ketiga

    Jika anda perlu menggunakan kaedah storan mesej lain, anda boleh menggunakan sambungan pihak ketiga (seperti yii-queue, Beanstalkd, dsb.) untuk melaksanakan fungsi baris gilir mesej. Mengambil yii-queue sebagai contoh, kita perlu mengkonfigurasi yang berikut:
Pasang sambungan

    Gunakan komposer untuk memasang sambungan yii-queue:
  1. composer require yii2tech/queue
    Salin selepas log masuk
Konfigurasi komponen aplikasi

    Konfigurasikan komponen aplikasi dalam fail konfigurasi aplikasi (biasanya config/console.php):
  1. return [
        // ...
        'components' => [
            // ...
            'queue' => [
                'class' => yiiqueuemqpQueue::class,
                'host' => '127.0.0.1',
                'port' => 5672,
                'user' => 'guest',
                'password' => 'guest',
                'queueName' => 'queue-name',
            ],
            // ...
        ],
        // ...
    ];
    Salin selepas log masuk
  2. Konfigurasi di atas menggunakan amqp sebagai mesej storan dan perlu dipasang sambungan php-amqp.

Menulis kelas pemprosesan mesej

    Untuk menggunakan yii-queue dalam rangka kerja Yii, kita perlu melaksanakan antara muka Kerja untuk mentakrifkan proses pemprosesan tugas. Sebagai contoh, kami mencipta kelas pemprosesan mesej bernama ExportTask:
  1. use yiiqueueJob;
    
    class ExportTask implements Job
    {
        public $data;
    
        public function __construct($data)
        {
            $this->data = $data;
        }
    
        public function execute($queue)
        {
            // 处理导出任务
            // $this->data包含导出所需的参数和数据
        }
    }
    Salin selepas log masuk
Hantar mesej

    Di mana anda perlu menghantar mesej, hubungi Yii::$app-> Kaedah baris gilir->tekan menghantar mesej ke baris gilir:
  1. Yii::$app->queue->push(new ExportTask(['file' => 'export.xlsx', 'data' => $data]));
    Salin selepas log masuk
    Salin selepas log masuk
Mulakan proses pengguna

    Gunakan arahan konsol yang disediakan oleh rangka kerja Yii untuk memulakan pengguna proses:
  1. yii queue/run
    Salin selepas log masuk
  2. Selepas permulaan, proses pengguna akan berjalan di latar belakang, mendengar mesej dalam baris gilir dan memprosesnya.

Di atas ialah langkah asas untuk melaksanakan baris gilir mesej menggunakan sambungan yii-queue. Perlu diingatkan bahawa kaedah penyimpanan mesej yang disokong oleh sambungan yii-queue termasuk pangkalan data, redis, beanstalkd, dsb. sebagai tambahan kepada amqp.

3. Pengoptimuman baris gilir mesej

Dalam proses menggunakan baris gilir mesej, kita perlu mengoptimumkan prestasi, keselamatan dan aspek baris gilir mesej yang lain. Berikut ialah beberapa kaedah pengoptimuman biasa:

Gunakan semula sambungan baris gilir

    Setiap kali anda menggunakan komponen baris gilir untuk memproses tugas, anda perlu menyambung semula ke pelayan baris gilir. Kerap mencipta sambungan akan menyebabkan Serius menjejaskan prestasi. Kami boleh mempertimbangkan untuk menggunakan kumpulan sambungan atau mod tunggal untuk menggunakan semula sambungan untuk meningkatkan prestasi.
    1. Pengesahan penghantaran mesej

    Apabila menghantar mesej, anda boleh menggunakan mekanisme pengesahan penghantaran mesej untuk memastikan mesej berjaya dihantar ke pelayan baris gilir. Hanya selepas pelayan baris gilir mengembalikan mesej pengesahan penghantaran yang berjaya, kami boleh memadam mesej daripada senarai tugas untuk memastikan mesej tidak diproses berulang kali.

    1. Mekanisme cuba semula mesej

    Apabila pengecualian atau ralat lain berlaku semasa pemprosesan tugas, kami boleh menggunakan mekanisme cuba semula mesej untuk menghantar semula mesej. Contohnya, apabila memproses tugas eksport, jika penjanaan fail gagal, kami boleh menyerahkan semula tugas itu ke baris gilir dan menunggu pemprosesan seterusnya.

    1. Pertimbangan Keselamatan

    Keselamatan baris gilir mesej adalah sangat kritikal, terutamanya apabila berurusan dengan data sensitif. Untuk memastikan keselamatan mesej, kami boleh menyulitkan dan menyahsulit mesej pada masa yang sama, kami perlu memberi perhatian kepada menetapkan konfigurasi keselamatan sambungan baris gilir untuk mengelakkan serangan berniat jahat.

    4. Ringkasan

    Baris gilir mesej ialah alat yang berkesan untuk pemprosesan tak segerak dan telah digunakan secara meluas dalam banyak sistem berskala besar. Dalam rangka kerja Yii, kami boleh menggunakan komponen baris gilir terbina dalam atau sambungan pihak ketiga (seperti yii-queue, Beanstalkd, dll.) untuk melaksanakan fungsi baris gilir mesej Dengan meningkatkan kelajuan tindak balas sistem dan keupayaan pemprosesan, ia meningkatkan pengalaman pengguna dan kestabilan sistem. Apabila menggunakan baris gilir mesej, kita perlu mengoptimumkan sambungan baris gilir, pengesahan penghantaran mesej, percubaan semula mesej dan keselamatan untuk memastikan kebolehpercayaan dan kerahsiaan mesej.

Atas ialah kandungan terperinci Baris Gilir Mesej dalam Rangka Kerja Yii: Melaksanakan Pemprosesan Asynchronous. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.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