


Amalan penyepaduan Swoole dan RabbitMQ: membina sistem baris gilir mesej ketersediaan tinggi
Dengan kemunculan era Internet, sistem baris gilir mesej menjadi semakin penting. Ia membolehkan operasi tak segerak antara aplikasi yang berbeza, mengurangkan gandingan dan meningkatkan kebolehskalaan, dengan itu meningkatkan prestasi dan pengalaman pengguna keseluruhan sistem. Dalam sistem baris gilir mesej, RabbitMQ ialah perisian beratur mesej sumber terbuka yang berkuasa Ia menyokong pelbagai protokol mesej dan digunakan secara meluas dalam transaksi kewangan, e-dagang, permainan dalam talian dan bidang lain.
Dalam aplikasi praktikal, selalunya diperlukan untuk mengintegrasikan RabbitMQ dengan sistem lain. Artikel ini akan memperkenalkan cara menggunakan sambungan swool untuk melaksanakan gugusan RabbitMQ yang tersedia tinggi dan menyediakan kod sampel yang lengkap.
1. Penyepaduan RabbitMQ
- Pengenalan kepada RabbitMQ
RabbitMQ ialah perisian baris gilir mesej merentas platform yang mematuhi sepenuhnya protokol AMQP ( Protokol Beratur Mesej Lanjutan) dan menyokong berbilang protokol mesej. Idea teras RabbitMQ adalah untuk meletakkan mesej ke dalam baris gilir dan mengeluarkannya apabila diperlukan, mencapai pertukaran data tak segerak dan komunikasi yang cekap.
- Integrasi RabbitMQ
Untuk mengintegrasikan RabbitMQ dengan aplikasi PHP, kami boleh menggunakan API yang disediakan oleh perpustakaan PHP AMQP. Perpustakaan ini menyokong protokol dan sambungan AMQP 0-9-1 utama RabbitMQ, termasuk Terbitkan, Langgan, Baris Gilir, Pertukaran dan fungsi lain. Berikut ialah kod contoh mudah:
<?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); // 创建消息 $msg = new AMQPMessage('Hello World!'); // 发送消息 $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!' "; // 关闭连接 $channel->close(); $connection->close(); ?>
Kod contoh ini bersambung ke pelayan RabbitMQ setempat ('localhost'), mengisytiharkan baris gilir bernama 'hello' dan menghantar mesej ke baris gilir ini.
2. Penyepaduan Swoole
- Pengenalan Swoole
Swoole ialah rangka kerja komunikasi rangkaian tak segerak PHP berprestasi tinggi yang melaksanakan TCP dan UDP tak segerak , HTTP, WebSocket dan protokol komunikasi lain. Ia dicirikan oleh konkurensi tinggi, prestasi tinggi, penggunaan rendah, dan pembangunan mudah Ia telah digunakan secara meluas dalam senario seperti perkhidmatan web dan pelayan permainan.
- Swoole menyepadukan RabbitMQ
Ciri tak segerak Swoole sangat serasi dengan komunikasi tak segerak RabbitMQ, dan boleh mencapai sistem baris gilir mesej yang cekap, stabil dan kependaman rendah. Berikut ialah contoh kod untuk Swoole mengintegrasikan RabbitMQ:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; // 建立连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明队列 $channel->queue_declare('task_queue', false, true, false, false); echo " [*] Waiting for messages. To exit press CTRL+C "; // 接收消息 $callback = function ($msg) { echo ' [x] Received ', $msg->body, " "; sleep(substr_count($msg->body, '.')); echo " [x] Done "; }; $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, $callback); // 监听消息 while (count($channel->callbacks)) { $channel->wait(); } // 关闭连接 $channel->close(); $connection->close(); ?>
Kod sampel ini bersambung ke pelayan RabbitMQ setempat ('localhost'), mengisytiharkan baris gilir berterusan 'task_queue' dan mula mendengar mesej baris gilir. Apabila mesej tiba, Swoole akan memanggil fungsi panggil balik secara tak segerak, dan boleh menghantar respons selepas memproses logik perniagaan dalam fungsi panggil balik untuk mencapai komunikasi tak segerak kependaman rendah yang cekap.
3. Seni bina ketersediaan tinggi
Untuk mencapai sistem baris gilir mesej ketersediaan tinggi, kami perlu menyepadukan berbilang nod RabbitMQ dalam kelompok untuk meningkatkan kebolehskalaan dan toleransi kesalahan sistem .
Konfigurasi kelompok RabbitMQ yang biasa digunakan termasuk mod siap sedia aktif dan mod pencerminan. Dalam mod siap sedia aktif, satu nod berfungsi sebagai nod aktif dan nod lain berfungsi sebagai nod sandaran. Apabila nod utama turun, nod sandaran secara automatik mengambil alih tanggungjawabnya. Dalam mod cermin, baris gilir direplikasi ke cakera pada berbilang nod dan disegerakkan. Setiap nod ini boleh mengendalikan mesej yang dihantar oleh pengeluar dan permintaan pengguna.
Memandangkan kestabilan, kebolehskalaan, kebolehselenggaraan dan faktor lain, kami memilih mod cermin sebagai seni bina ketersediaan tinggi kami. Berikut ialah kod contoh untuk menambah baris gilir cermin dalam fail konfigurasi:
$channel->queue_declare('task_queue', false, true, false, false, false, array( 'x-ha-policy' => array('S', 'all'), 'x-dead-letter-exchange' => array('S', 'dead_exchange'), ));
Kod sampel ini mencipta baris gilir berterusan bernama 'task_queue' dan menetapkan parameter 'x-ha-policy' kepada 'semua' , menunjukkan bahawa semua baris gilir cermin baris gilir ini adalah "sangat tersedia". Pada masa yang sama, parameter 'x-dead-letter-exchange' juga ditetapkan kepada 'dead_exchange', yang bermaksud bahawa mesej akan dihantar ke suis ini selepas ditolak. Suis ini boleh mempunyai satu atau lebih baris gilir terikat untuk penggunaan semula mesej atau statistik.
4. Kod sampel lengkap
Berikut ialah kod contoh sistem baris gilir mesej yang lengkap, yang menggunakan rangka kerja komunikasi tak segerak Swoole untuk menyepadukan mod giliran cermin RabbitMQ untuk mencapai baris gilir mesej ketersediaan tinggi sistem. Anda boleh mengubah suai konfigurasi atau kod untuk melaksanakan sistem baris gilir mesej anda sendiri mengikut keperluan sebenar.
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; $exchangeName = 'test.exchange'; $queueName = 'test.queue'; $deadExchangeName = 'dead.exchange'; // 建立连接 $connection = new AMQPStreamConnection( 'localhost', 5672, 'guest', 'guest', '/', false, 'AMQPLAIN', null, 'en_US', 3.0, 3.0, null, true ); $channel = $connection->channel(); // 声明交换机 $channel->exchange_declare($exchangeName, 'direct', false, true, false); // 声明死信交换机 $channel->exchange_declare($deadExchangeName, 'fanout', false, true, false); // 声明队列 $channel->queue_declare($queueName, false, true, false, false, false, array( 'x-ha-policy' => array('S', 'all'), 'x-dead-letter-exchange' => array('S', $deadExchangeName), )); // 绑定队列到交换机中 $channel->queue_bind($queueName, $exchangeName); echo " [*] Waiting for messages. To exit press CTRL+C "; // 接收消息 $callback = function ($msg) { echo ' [x] Received ', $msg->body, " "; sleep(substr_count($msg->body, '.')); echo " [x] Done "; $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); }; $channel->basic_qos(null, 1, null); $channel->basic_consume($queueName, '', false, false, false, false, $callback); // 监听消息 while (count($channel->callbacks)) { $channel->wait(); } // 关闭连接 $channel->close(); $connection->close(); ?>
Dalam kod di atas, sambungan kepada RabbitMQ mula-mula diwujudkan melalui kelas AMQPStreamConnection. Kemudian buat suis bernama 'test.exchange', baris gilir bernama 'test.queue' dan tetapkan 'x-ha-policy' kepada 'semua', menunjukkan bahawa baris gilir ini ialah baris gilir cermin dan semua nod boleh mengakses. Pada masa yang sama, 'x-dead-letter-exchange' juga ditetapkan kepada 'dead.exchange', yang bermaksud bahawa mesej akan dihantar ke suis 'dead.exchange' selepas ditolak.
Akhir sekali, dalam fungsi panggil balik, gunakan kaedah basic_ack() untuk menentukan kejayaan penggunaan dan lepaskan sumber yang diduduki oleh mesej.
Di atas adalah kandungan yang berkaitan tentang amalan penyepaduan Swoole dan RabbitMQ. Dengan menggunakan sambungan Swoole, kami boleh melaksanakan komunikasi tak segerak dengan mudah dan menyepadukan berbilang nod RabbitMQ ke dalam sistem baris gilir mesej ketersediaan tinggi untuk meningkatkan prestasi dan kestabilan sistem.
Atas ialah kandungan terperinci Amalan penyepaduan Swoole dan RabbitMQ: membina sistem baris gilir mesej ketersediaan tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Menggunakan coroutine Swoole dalam Laravel boleh memproses sejumlah besar permintaan secara serentak. Kelebihannya termasuk: Pemprosesan serentak: membolehkan berbilang permintaan diproses pada masa yang sama. Prestasi tinggi: Berdasarkan mekanisme acara epoll Linux, ia memproses permintaan dengan cekap. Penggunaan sumber yang rendah: memerlukan lebih sedikit sumber pelayan. Mudah untuk disepadukan: Penyepaduan lancar dengan rangka kerja Laravel, mudah digunakan.

Cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi, tak segerak dan serentak berdasarkan bahasa PHP. Ia menyediakan satu siri fungsi rangkaian dan boleh digunakan untuk melaksanakan pelayan HTTP, pelayan WebSocket, dsb. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi dan memberikan contoh kod khusus. Konfigurasi persekitaran Pertama, kita perlu memasang sambungan Swoole pada pelayan

Swoole dan Workerman kedua-duanya adalah rangka kerja pelayan PHP berprestasi tinggi. Terkenal dengan pemprosesan tak segerak, prestasi cemerlang dan kebolehskalaannya, Swoole sesuai untuk projek yang perlu mengendalikan sejumlah besar permintaan serentak dan daya pemprosesan yang tinggi. Workerman menawarkan fleksibiliti mod tak segerak dan segerak, dengan API intuitif yang lebih sesuai untuk kemudahan penggunaan dan projek yang mengendalikan volum serentak yang lebih rendah.

Proses Swoole membolehkan pengguna beralih Langkah-langkah khusus ialah: membuat proses pengguna;

Untuk memulakan semula perkhidmatan Swoole, ikut langkah berikut: Semak status perkhidmatan dan dapatkan PID. Gunakan "bunuh -15 PID" untuk menghentikan perkhidmatan. Mulakan semula perkhidmatan menggunakan arahan yang sama yang memulakan perkhidmatan.

Perbandingan prestasi: Throughput: Swoole mempunyai throughput yang lebih tinggi berkat mekanisme coroutinenya. Latensi: Penukaran konteks coroutine Swoole mempunyai overhed yang lebih rendah dan kependaman yang lebih kecil. Penggunaan ingatan: Coroutine Swoole menduduki kurang memori. Kemudahan penggunaan: Swoole menyediakan API pengaturcaraan serentak yang lebih mudah digunakan.

Swoole in action: Cara menggunakan coroutine untuk pemprosesan tugas serentak Pengenalan Dalam pembangunan harian, kita sering menghadapi situasi di mana kita perlu mengendalikan berbilang tugas pada masa yang sama. Kaedah pemprosesan tradisional adalah menggunakan pelbagai benang atau pelbagai proses untuk mencapai pemprosesan serentak, tetapi kaedah ini mempunyai masalah tertentu dalam prestasi dan penggunaan sumber. Sebagai bahasa skrip, PHP biasanya tidak boleh terus menggunakan kaedah berbilang benang atau berbilang proses untuk mengendalikan tugas. Walau bagaimanapun, dengan bantuan perpustakaan coroutine Swoole, kami boleh menggunakan coroutine untuk mencapai pemprosesan tugas serentak berprestasi tinggi. Artikel ini akan memperkenalkan

Cara menggunakan Workerman untuk membina sistem pengimbangan beban dengan ketersediaan tinggi memerlukan contoh kod khusus Dalam bidang teknologi moden, dengan perkembangan pesat Internet, semakin banyak laman web dan aplikasi perlu mengendalikan sejumlah besar permintaan serentak. Untuk mencapai ketersediaan tinggi dan prestasi tinggi, sistem pengimbangan beban telah menjadi salah satu komponen penting. Artikel ini akan memperkenalkan cara menggunakan rangka kerja sumber terbuka PHP Workerman untuk membina sistem pengimbangan beban dengan ketersediaan tinggi dan menyediakan contoh kod khusus. 1. Pengenalan kepada Workerman Worke
