Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan baris gilir yang diedarkan dan saluran paip mesej menggunakan perkhidmatan mikro PHP

Bagaimana untuk melaksanakan baris gilir yang diedarkan dan saluran paip mesej menggunakan perkhidmatan mikro PHP

王林
王林asal
2023-09-24 10:06:211317semak imbas

Bagaimana untuk melaksanakan baris gilir yang diedarkan dan saluran paip mesej menggunakan perkhidmatan mikro PHP

Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan baris gilir dan saluran mesej yang diedarkan

Pengenalan:
Dengan pembangunan berterusan aplikasi Internet dan pertumbuhan skala data, aplikasi tunggal tradisional tidak lagi dapat memenuhi keperluan aplikasi moden untuk keselarasan tinggi dan keperluan Ketersediaan yang tinggi. Sebagai penyelesaian, seni bina teragih secara beransur-ansur digunakan secara meluas dalam industri Internet. Dalam seni bina teragih, perkhidmatan mikro ialah kaedah reka bentuk biasa yang membahagikan aplikasi besar kepada berbilang unit perkhidmatan kecil Setiap unit perkhidmatan boleh digunakan secara bebas, dikembangkan secara bebas dan dikemas kini secara bebas. Artikel ini akan memperkenalkan cara menggunakan perkhidmatan mikro PHP untuk melaksanakan baris gilir yang diedarkan dan saluran paip mesej serta menyediakan contoh kod yang berkaitan.

1. Konsep baris gilir teragih
Gilir teragih ialah mekanisme yang biasa digunakan untuk menyelesaikan penghantaran mesej dan penjadualan tugas. Ia menyimpan tugas atau mesej dalam baris gilir dan dibaca dari baris gilir dan diproses oleh berbilang pengguna. Gilir teragih mempunyai ciri-ciri berikut:

  1. Ketersediaan tinggi: Gilir teragih biasanya mempunyai mod tuan-hamba atau berbilang tuan dan boleh bertolak ansur dengan kegagalan nod tertentu.
  2. Konkurensi tinggi: Barisan beratur boleh menyokong pemesejan serentak tinggi dan penjadualan tugas, serta boleh mengendalikan permintaan serentak berskala besar dengan mudah.
  3. Skalabiliti: Baris gilir teragih boleh dikembangkan secara dinamik berdasarkan permintaan untuk memenuhi keperluan aplikasi dengan saiz yang berbeza.

2. Gunakan Redis untuk melaksanakan baris gilir teragih
Redis ialah pangkalan data dalam memori berprestasi tinggi yang menyediakan fungsi baris gilir yang berkuasa. Kita boleh menggunakan struktur data Senarai Redis untuk melaksanakan baris gilir teragih. Langkah-langkah pelaksanaan khusus adalah seperti berikut:

  1. Pasang Redis
    Mula-mula pasang Redis dan mulakan pelayan Redis Anda boleh memuat turunnya dari laman web rasmi dan memasang serta mengkonfigurasinya mengikut panduan rasmi.
  2. Buat pengeluar
    Dalam PHP, anda boleh menggunakan Predis sebagai perpustakaan pelanggan untuk Redis. Mula-mula anda perlu memasang perpustakaan Predis dalam projek, dan kemudian buat pengeluar melalui kod berikut:

memerlukan 'predis/autoload.php';

PredisAutoloader::register();

$redis = PredisClient baharu();

$redis->lpush('queue', 'task1');
$redis->lpush('queue', 'task2');
?>

The kod di atas dihantar melalui perintah lpush Tambah tugas tugas1 dan tugas2 ke baris gilir.

  1. Buat pengguna
    Pengguna boleh membaca daripada baris gilir dan memproses tugas melalui kod berikut:

memerlukan 'predis/autoload.php';

PredisAutoloader::register

(); redis = new PredisClient();

while (true) {

$task = $redis->rpop('queue');
if ($task) {
    // 处理任务的代码
    echo $task . " processed

";

} else {
    // 休眠1秒
    sleep(1);
}

}

?>

Kod di atas membaca tugasan daripada baris gilir melalui arahan rpop. Jika baris gilir kosong, ia akan tidur Cuba lagi selepas 1 saat

3. Konsep saluran paip mesej

Saluran mesej ialah mekanisme yang menyokong penyiaran dan langganan mesej Ia membolehkan berbilang pengguna melanggan topik yang sama dan menerima mesej yang sama ciri berikut:

    Kebolehpercayaan tinggi: Saluran paip mesej biasanya dilaksanakan melalui model penerbitan dan langganan, yang boleh memastikan penyampaian mesej yang boleh dipercayai
  1. Kecekapan: Saluran paip mesej boleh menyokong penyiaran dan langganan mesej yang cekap
  2. Saluran paip boleh dikembangkan secara dinamik mengikut keperluan untuk memenuhi keperluan pemesejan berskala besar 4. Gunakan RabbitMQ untuk melaksanakan saluran paip mesej RabbitMQ ialah perisian tengah mesej yang boleh dipercayai yang menyediakan fungsi saluran mesej yang berkuasa berikut:
Pasang RabbitMQ

Mula-mula pasang RabbitMQ dan mulakan pelayan RabbitMQ Anda boleh memuat turunnya dari laman web rasmi dan ikuti panduan rasmi untuk memasang dan mengkonfigurasinya
Buat pengeluar dalam PHP perpustakaan pelanggan RabbitMQ Pertama, anda perlu memasang perpustakaan php-amqplib dalam projek, dan kemudian mencipta pengeluar melalui kod berikut:

  1. memerlukan 'vendor/autoload.php';
  2. gunakan PhpAmqpLibConnectionAMQPStreamConnection;
    gunakan PhpAmqpLibMessageAMQPMessage;
$connection = new AMQPStreamConnection('localhost', 5672, 'tetamu', 'tetamu');

$channel = $saluran
&-); queue_declare('queue', false, false, false, false);

$message = new AMQPMessage('hello world');
$channel->basic_publish($message, '', 'queue');

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

?>

Kod di atas menghantar mesej 'hello world' ke baris gilir melalui kaedah basic_publish.


Cipta pengguna

Pengguna boleh melanggan dan menerima mesej melalui kod berikut:

memerlukan 'vendor/autoload.php';
    Gunakan PhpAmqpLibConnectionAM;LibAmConnectionAM;LibAmMessage

  1. $sambungan = baharu AMQPStreamConnection('localhost', 5672, 'tetamu', 'tetamu');
  2. $channel = $connection->channel();

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

$pengguna = fungsi ($mesej) {

// 处理消息的代码
echo $message->body . " received

";

$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);

};

$channel->basic_qos(null, 1, null);
$channel->basic_consume('queue', '', false, false, false, false, $consumer);

while (count($channel->callbacks)) {

$channel->wait();

}

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

以上代码通过basic_consume方法订阅队列queue,在回调函数中处理接收到的消息,并通过basic_ack方法确认消息的接收。

结论:
通过使用PHP微服务实现分布式队列和消息管道,可以提供高可用性、高并发和可扩展性的消息传递和任务调度机制。本文介绍了使用Redis实现分布式队列和使用RabbitMQ实现消息管道的具体步骤,并提供了相关的代码示例。读者可以根据自己的实际需求进行相应的修改和扩展。

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan baris gilir yang diedarkan dan saluran paip mesej menggunakan perkhidmatan mikro PHP. 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