Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gabungan sempurna PHP dan RabbitMQ: cara membina sistem dipacu acara yang boleh dipercayai

Gabungan sempurna PHP dan RabbitMQ: cara membina sistem dipacu acara yang boleh dipercayai

WBOY
WBOYasal
2023-07-16 23:02:101372semak imbas

Gabungan sempurna PHP dan RabbitMQ: Cara membina sistem dipacu peristiwa yang boleh dipercayai

Pengenalan:
Dalam pembangunan aplikasi Internet hari ini, sistem dipacu peristiwa semakin dihargai oleh pembangun kerana cirinya yang cekap dan boleh dipercayai. Apabila membina sistem dipacu peristiwa, memilih baris gilir mesej yang betul adalah langkah penting. Artikel ini akan memperkenalkan cara menggunakan PHP dan RabbitMQ untuk membina sistem dipacu acara yang boleh dipercayai dan memberikan contoh kod.

1. Pengenalan kepada RabbitMQ
RabbitMQ ialah perisian tengah baris gilir mesej sumber terbuka, dilaksanakan berdasarkan AMQP (Advanced Message Qeuing Protocol). Ia menyediakan penyampaian mesej yang boleh dipercayai dan fungsi penghalaan mesej yang berkuasa, dan sesuai untuk sistem teragih yang berkonkurensi tinggi dan ketersediaan tinggi.

2. Sambungan RabbitMQ dalam PHP
Terdapat berbilang sambungan RabbitMQ untuk dipilih dalam PHP, seperti php-amqp, php-amqplib, dsb. Dalam artikel ini, kami akan menggunakan sambungan php-amqp untuk mengendalikan RabbitMQ.
Pertama, kita perlu memasang sambungan php-amqp. Anda boleh menggunakan arahan berikut untuk memasang:

sudo apt-get install librabbitmq-dev
pecl install amqp

3. Langkah-langkah untuk membina sistem dipacu peristiwa menggunakan RabbitMQ

  1. Tentukan acara dan pengguna
    Pertama, kita perlu menentukan peristiwa dalam sistem dan pengguna yang sepadan. Peristiwa ialah tindakan atau perubahan keadaan yang berlaku dalam sistem, dan pengguna bertanggungjawab untuk memproses peristiwa ini.
    Sebagai contoh, kami mentakrifkan acara bernama "UserRegistered" dan pengguna yang sepadan "sendWelcomeEmail".

    <?php
    // 定义事件类
    class UserRegistered{
     public $userId;
     public function __construct($userId){
         $this->userId = $userId;
     }
    }
    
    // 定义消费者函数
    function sendWelcomeEmail($event){
     // 根据用户ID发送欢迎邮件
     $userId = $event->userId;
     // 发送逻辑代码...
    }
    ?>
  2. Terbitkan acara
    Apabila pengguna baharu mendaftar, kami perlu menerbitkan acara "UserRegistered".

    <?php
    $user = // 获取新注册用户信息
    $event = new UserRegistered($user->id);
    
    // 连接到RabbitMQ
    $connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();
    
    // 声明队列
    $channel->queue_declare('event_queue', false, false, false, false);
    
    // 序列化事件对象为JSON字符串
    $message = json_encode($event);
    
    // 发布事件到队列
    $channel->basic_publish(new AMQPMessage($message), '', 'event_queue');
    
    // 关闭连接
    $channel->close();
    $connection->close();
    ?>
  3. Acara pengguna
    Pengguna mula mendengar baris gilir acara apabila sistem bermula dan melaksanakan fungsi pemprosesan yang sepadan mengikut jenis acara yang berbeza.

    <?php
    $connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();
    
    // 声明队列
    $channel->queue_declare('event_queue', false, false, false, false);
    
    // 设置每次从队列中获取一个消息
    $channel->basic_qos(null, 1, null);
    
    // 定义消息回调处理函数
    $callback = function($msg) {
     $event = json_decode($msg->body);
     
     // 根据事件类型调用对应的处理函数
     switch(get_class($event)){
         case 'UserRegistered':
             sendWelcomeEmail($event);
             break;
         // 其他事件类型的处理...
     }
     
     // 手动确认消息已被消费
     $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
    };
    
    // 注册消息回调函数
    $channel->basic_consume('event_queue', '', false, false, false, false, $callback);
    
    // 开始监听事件队列
    while (count($channel->callbacks)) {
     $channel->wait();
    }
    
    // 关闭连接
    $channel->close();
    $connection->close();
    ?>

4. Ringkasan
Artikel ini memperkenalkan cara menggunakan PHP dan RabbitMQ untuk membina sistem dipacu acara yang boleh dipercayai. Dengan mentakrifkan acara dan pengguna, acara penerbitan dan acara makan, kami boleh mencapai penyahgandingan sistem dan pemprosesan berprestasi tinggi. Ciri baris gilir mesej RabbitMQ memastikan penyampaian peristiwa tak segerak yang boleh dipercayai, menjadikan sistem dipacu peristiwa lebih stabil dan berskala.

Dalam aplikasi praktikal, reka bentuk dan penalaan yang munasabah perlu dijalankan mengikut senario perniagaan tertentu. Pada masa yang sama, kami juga boleh menggunakan sambungan PHP lain, seperti sistem baris gilir Laravel, untuk memudahkan atau mengoptimumkan proses pembangunan sistem dipacu peristiwa.

Pautan rujukan:

  1. Tapak web rasmi RabbitMQ: https://www.rabbitmq.com/
  2. php-amqp sambungan Repositori GitHub: https://github.com/pdezwart/php-amqp
sila sampel Merujuk kepada artikel di atas, menyepadukan setiap segmen kod bersama-sama boleh melengkapkan pembinaan sistem dipacu peristiwa.

Atas ialah kandungan terperinci Gabungan sempurna PHP dan RabbitMQ: cara membina sistem dipacu acara yang boleh dipercayai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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