Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pembangunan tak segerak fungsi PHP menggunakan perkhidmatan mikro?

Bagaimana untuk melaksanakan pembangunan tak segerak fungsi PHP menggunakan perkhidmatan mikro?

王林
王林asal
2023-09-18 14:30:111165semak imbas

Bagaimana untuk melaksanakan pembangunan tak segerak fungsi PHP menggunakan perkhidmatan mikro?

Bagaimana untuk melaksanakan pembangunan tak segerak fungsi PHP menggunakan perkhidmatan mikro?

Dengan perkembangan pesat Internet, keperluan perniagaan menjadi semakin kompleks, meletakkan keperluan yang lebih tinggi pada prestasi sistem dan pengalaman pengguna. Dalam pembangunan PHP, pelaksanaan tak segerak telah menjadi trend. Seni bina perkhidmatan mikro ialah cara membina sistem teragih yang menjadikan sistem lebih mudah untuk dikembangkan dan diselenggara dengan membahagikan sistem kepada berbilang perkhidmatan bebas. Artikel ini akan memperkenalkan cara menggunakan perkhidmatan mikro untuk melaksanakan pembangunan tak segerak bagi fungsi PHP dan memberikan contoh kod khusus.

  1. Tinjauan Seni Bina Perkhidmatan Mikro
    Seni bina perkhidmatan mikro ialah gaya seni bina berorientasikan perkhidmatan yang membahagikan aplikasi kepada berbilang perkhidmatan kecil, setiap perkhidmatan boleh digunakan secara berasingan, operasi bebas. Setiap perkhidmatan mikro mempunyai stor data sendiri dan boleh berkomunikasi melalui API. Idea teras seni bina perkhidmatan mikro ialah pemisahan perkhidmatan dan komunikasi perkhidmatan.
  2. Kelebihan pembangunan tak segerak
    Pembangunan tak segerak boleh meningkatkan prestasi serentak dan kelajuan tindak balas sistem. Dalam model pembangunan segerak tradisional, setiap permintaan mesti menunggu pemprosesan permintaan sebelumnya diselesaikan sebelum meneruskan ke langkah seterusnya, yang akan menyebabkan sistem bertindak balas dengan perlahan. Dalam mod pembangunan tak segerak, berbilang permintaan boleh diproses pada masa yang sama, meningkatkan keupayaan pemprosesan serentak sistem. Di samping itu, pembangunan tak segerak juga boleh mencapai penyahgandingan tugas melalui baris gilir mesej, meningkatkan kebolehskalaan dan kestabilan sistem.
  3. Menggunakan baris gilir mesej
    Baris gilir mesej ialah cara biasa untuk mencapai pembangunan tak segerak. Terdapat banyak komponen baris gilir mesej sumber terbuka untuk dipilih dalam PHP, seperti RabbitMQ, Kafka, dll. Berikut mengambil RabbitMQ sebagai contoh untuk memperkenalkan cara menggunakan baris gilir mesej untuk mencapai pembangunan tak segerak.

Pertama, kita perlu memasang pelayan RabbitMQ dan menggunakan perpustakaan klien RabbitMQ dalam projek PHP. Anda boleh menggunakan komposer untuk mengurus kebergantungan projek dan laksanakan arahan berikut untuk memasang:

composer require php-amqplib/php-amqplib

Selepas pemasangan selesai, kita boleh mula menggunakan RabbitMQ dalam projek PHP.

  1. Corak Pengeluar dan Pengguna
    Apabila menggunakan baris gilir mesej untuk melaksanakan pembangunan tak segerak, anda biasanya perlu menggunakan corak pengeluar dan pengguna. Pengeluar bertanggungjawab untuk menghantar mesej ke baris gilir mesej, manakala pengguna memperoleh mesej daripada baris gilir mesej dan memprosesnya.

Pertama, kami mencipta pengeluar dan menghantar mesej ke baris gilir:

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

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

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

$message = new AMQPMessage('Hello World!');
$channel->basic_publish($message, '', 'hello');

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

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

Kemudian, kami mencipta pengguna untuk mendapatkan mesej daripada baris gilir Dan proses ia:

<?php

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

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

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

echo " [*] Waiting for messages. To exit press CTRL+C
";

$callback = function ($message) {
  echo ' [x] Received ', $message->body, "
";
};

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

while (count($channel->callbacks)) {
  $channel->wait();
}

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

Melalui kod di atas, kita dapat melihat bahawa pengeluar menghantar mesej ke baris gilir, dan pengguna memperoleh mesej melalui fungsi panggil balik dan memprosesnya. Dengan cara ini kami melaksanakan model pengeluar dan pengguna yang mudah.

  1. Digabungkan dengan seni bina perkhidmatan mikro
    Dalam pembangunan sebenar, setiap perkhidmatan boleh dibahagikan kepada perkhidmatan mikro bebas, dan setiap perkhidmatan mikro mempunyai baris gilir mesejnya sendiri. Apabila perkhidmatan perlu memanggil perkhidmatan lain, ia boleh menghantar permintaan terus ke baris gilir mesej perkhidmatan lain, dan kemudian perkhidmatan lain mendapatkan permintaan daripada baris gilir mesej dan memprosesnya.

Berikut mengambil perkhidmatan pengguna dan perkhidmatan pesanan sebagai contoh untuk menunjukkan cara menggunakan baris gilir mesej untuk mencapai pembangunan tak segerak dalam seni bina perkhidmatan mikro.

Pertama, kami mencipta perkhidmatan pengguna, yang bertanggungjawab untuk mengendalikan permintaan pendaftaran pengguna:

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

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

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

$message = new AMQPMessage(json_encode(['username' => 'example', 'password' => '123456']));
$channel->basic_publish($message, '', 'register');

echo " [x] Sent 'Register Request'
";

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

Kemudian, kami mencipta perkhidmatan pesanan, yang melanggan permintaan pendaftaran pengguna , dan Jana pesanan baharu:

<?php

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

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

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

echo " [*] Waiting for register requests. To exit press CTRL+C
";

$callback = function ($message) {
  $data = json_decode($message->body, true);
  // 处理注册请求,生成订单等操作
  echo ' [x] Received Register Request: ', $message->body, "
";
};

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

while (count($channel->callbacks)) {
  $channel->wait();
}

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

Melalui kod di atas, perkhidmatan pengguna menghantar permintaan pendaftaran ke baris gilir mesej, dan perkhidmatan pesanan memproses permintaan pendaftaran selepas menerimanya. Dengan cara ini, kami telah melaksanakan komunikasi mudah antara perkhidmatan pengguna dan perkhidmatan pesanan.

Ringkasan:

Dengan menggunakan seni bina perkhidmatan mikro dan baris gilir mesej, pembangunan tak segerak bagi fungsi PHP boleh dicapai. Pisahkan sistem kepada berbilang perkhidmatan mikro, setiap perkhidmatan mikro mempunyai baris gilir mesej sendiri dan berkomunikasi melalui baris gilir mesej. Ini boleh meningkatkan prestasi serentak dan kelajuan tindak balas sistem, mencapai penyahgandingan tugas, dan meningkatkan kestabilan dan kebolehskalaan sistem. Saya harap artikel ini akan membantu anda memahami pembangunan tak segerak bagi perkhidmatan mikro.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pembangunan tak segerak fungsi PHP menggunakan 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