Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan menggabungkan baris gilir mesej PHP dan seni bina perkhidmatan mikro

Amalan menggabungkan baris gilir mesej PHP dan seni bina perkhidmatan mikro

WBOY
WBOYasal
2023-07-08 11:10:46984semak imbas

Amalan menggabungkan baris gilir mesej PHP dengan seni bina perkhidmatan mikro

Pengenalan:
Dengan peningkatan kerumitan aplikasi moden, penggunaan seni bina perkhidmatan mikro telah menjadi cara yang diperlukan untuk membina kebolehskalaan dan fleksibiliti. Sebagai mod komunikasi tak segerak, baris gilir mesej boleh membantu memisahkan modul aplikasi yang berbeza dan meningkatkan kebolehpercayaan dan prestasi sistem. Artikel ini akan memperkenalkan cara menggunakan baris gilir mesej dalam PHP untuk menyokong seni bina perkhidmatan mikro dan menyediakan contoh kod.

1. Apakah itu baris gilir mesej?
Baris gilir mesej ialah corak komunikasi tak segerak yang digunakan untuk memisahkan komunikasi antara komponen atau perkhidmatan aplikasi yang berbeza. Pengirim mesej menghantar mesej ke baris gilir, dan penerima mendapat mesej daripada baris gilir dan memprosesnya. Baris gilir mesej menyediakan mekanisme komunikasi yang boleh dipercayai Walaupun komponen dalam sistem tidak tersedia, mesej boleh terkumpul dalam baris gilir dan menunggu untuk diproses selepas komponen dipulihkan.

2. Senario aplikasi baris gilir mesej dalam seni bina perkhidmatan mikro
Dalam seni bina perkhidmatan mikro, komunikasi dan kerjasama perlu dijalankan antara pelbagai perkhidmatan. Baris gilir mesej boleh digunakan pada senario berikut:

  1. Komunikasi tak segerak: Hantar permintaan ke baris gilir mesej, dan kemudian proseskannya secara tak segerak oleh pengguna.
  2. Penyahgandingan sistem: Meningkatkan kebolehpercayaan dan prestasi sistem dengan menukar komunikasi antara perkhidmatan bergantung kepada baris gilir mesej.
  3. Penjadualan tugas: Letakkan tugasan yang perlu ditangguhkan atau dijadualkan untuk dilaksanakan ke dalam baris gilir mesej, dan akan diproses oleh pengguna mengikut keutamaan dan peraturan penjadualan.

3 Pengenalan kepada sambungan baris gilir mesej PHP
Dalam PHP, terdapat banyak sambungan baris gilir mesej matang untuk dipilih, seperti RabbitMQ, ActiveMQ dan Kafka, dsb. Artikel ini akan memperkenalkan RabbitMQ sebagai contoh.

RabbitMQ ialah sistem baris gilir mesej sumber terbuka yang melaksanakan protokol AMQP (Advanced Message Qeuing Protocol) dan mempunyai kebolehpercayaan dan skalabiliti yang tinggi. Di bawah ialah contoh mudah yang menunjukkan cara menggunakan sambungan PHP RabbitMQ untuk membuat baris gilir mesej.

<?php

require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

// 连接RabbitMQ服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

// 声明一个名为hello的队列
$channel->queue_declare('hello', false, false, false, false);

// 发送消息到队列
$message = new AMQPMessage('Hello RabbitMQ!');
$channel->basic_publish($message, '', 'hello');

echo " [x] Sent 'Hello RabbitMQ!'
";

// 关闭连接
$channel->close();
$connection->close();
?>

4. Amalan baris gilir mesej dalam seni bina perkhidmatan mikro
Berikut mengambil sistem e-dagang yang mudah sebagai contoh untuk memperkenalkan cara menggabungkan baris gilir mesej dengan seni bina perkhidmatan mikro.

Senario: Selepas pengguna membuat pesanan, operasi seperti potongan inventori, pengiraan mata dan perubahan status pesanan perlu dilakukan.

  1. Perkhidmatan Inventori
    Buat perkhidmatan inventori, dengar pesanan acara kejayaan dan kendalikan logik potongan inventori.
<?php

require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('order_success_event', false, false, false, false);

$callback = function ($message) {
    echo " [x] Order success event received: " . $message->body . "
";
    
    // 处理库存扣减逻辑
    
    $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
};

$channel->basic_consume('order_success_event', '', false, false, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();
?>
  1. Perkhidmatan Mata
    Buat perkhidmatan mata, dengar pesanan acara kejayaan dan kendalikan logik pengiraan mata.
<?php

require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('order_success_event', false, false, false, false);

$callback = function ($message) {
    echo " [x] Order success event received: " . $message->body . "
";
    
    // 处理积分计算逻辑
    
    $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
};

$channel->basic_consume('order_success_event', '', false, false, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();
?>
  1. Perkhidmatan Pesanan
    Buat perkhidmatan pesanan untuk mengendalikan logik perniagaan berkaitan pesanan, termasuk menerima permintaan pesanan pengguna dan menghantar acara kejayaan pesanan.
<?php

require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('order_success_event', false, false, false, false);

// 接收用户下单请求
$request = $_POST; // 假设为用户的下单请求数据
$orderInfo = createOrder($request);

// 处理订单相关的业务逻辑

// 发送订单成功事件到消息队列
$message = new AMQPMessage(json_encode($orderInfo));
$channel->basic_publish($message, '', 'order_success_event');

echo "Order placed successfully!";

$channel->close();
$connection->close();

function createOrder($request) {
    // 创建订单的逻辑
    // ...
    
    return $orderInfo;
}
?>

5. Ringkasan
Artikel ini memperkenalkan cara menggunakan baris gilir mesej dalam PHP untuk menyokong seni bina perkhidmatan mikro dan menyediakan contoh kod RabbitMQ. Dengan menggunakan baris gilir mesej, kami boleh mencapai komunikasi penyahgandingan dan tak segerak antara perkhidmatan mikro, meningkatkan kebolehpercayaan dan prestasi sistem. Untuk aplikasi yang kompleks, mengguna pakai seni bina perkhidmatan mikro dan baris gilir mesej ialah pendekatan reka bentuk seni bina yang berkesan. Saya harap artikel ini akan membantu pembaca dalam amalan.

Atas ialah kandungan terperinci Amalan menggabungkan baris gilir mesej PHP dan seni bina perkhidmatan mikro. 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