RabbitMQ dan PHP: Cara melaksanakan pemprosesan tugas teragih
Pengenalan:
Dengan perkembangan pesat Internet, seni bina teragih semakin digemari oleh pembangun. Pemprosesan tugas teragih boleh meningkatkan kebolehskalaan, fleksibiliti dan kebolehpercayaan sistem. Artikel ini akan memperkenalkan cara menggunakan RabbitMQ dan PHP untuk melaksanakan pemprosesan tugas teragih, dan menyediakan contoh kod.
1. Apakah RabbitMQ?
RabbitMQ ialah perisian broker mesej sumber terbuka berdasarkan protokol AMQP (Advanced Message Qeuing Protocol). Melalui RabbitMQ, kita boleh mencapai komunikasi yang cekap antara sistem yang berbeza Pengeluar mesej menghantar mesej ke baris gilir mesej, dan pengguna mesej boleh mendapatkan mesej daripada baris gilir dan memprosesnya.
2. Mengapa memilih RabbitMQ untuk pemprosesan tugas yang diedarkan?
RabbitMQ, sebagai perisian broker mesej, menyediakan mekanisme penghantaran mesej yang kuat dan sangat sesuai untuk pemprosesan tugas teragih. Dengan merangkum tugas ke dalam mesej, pemprosesan tak segerak bagi tugas boleh dicapai dan kelajuan tindak balas dan kebolehpercayaan sistem boleh dipertingkatkan. Selain itu, RabbitMQ sangat tersedia dan berskala serta boleh memenuhi keperluan sistem dengan saiz yang berbeza.
3 Langkah untuk menggunakan RabbitMQ dan PHP untuk melaksanakan pemprosesan tugas teragih
<?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); $data = implode(' ', array_slice($argv, 1)); if (empty($data)) { $data = "Hello World!"; } $msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]); $channel->basic_publish($msg, '', 'task_queue'); echo " [x] Sent ", $data, " "; $channel->close(); $connection->close();
Seterusnya, kita perlu mencipta pengguna yang mendapat tugas daripada baris gilir mesej dan memprosesnya:
<?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 "; $channel->basic_qos(null, 1, null); $channel->basic_consume('task_queue', '', false, false, false, false, function (AMQPMessage $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']); }); while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close();
Kod di atas adalah contoh pengeluar dan pengguna masing-masing. Pengeluar merangkum tugas ke dalam mesej dan menghantarnya ke baris gilir mesej bernama "task_queue", manakala pengguna memperoleh tugas daripada baris gilir dan memprosesnya. Perlu diingatkan bahawa pengguna perlu mengesahkan penerimaan mesej secara manual.
php producer.php Task1
Kemudian, jalankan kod pengguna dalam tetingkap baris arahan lain untuk pemprosesan tugas:
php consumer.php
Dengan langkah di atas, kami Sistem pemprosesan tugas teragih berdasarkan RabbitMQ dan PHP telah dilaksanakan.
Kesimpulan:
Dengan menggunakan RabbitMQ dan PHP, kami boleh melaksanakan pemprosesan tugas teragih dengan mudah. Dengan merangkum tugasan ke dalam mesej dan menghantarnya ke baris gilir mesej, pemprosesan tak segerak bagi tugas boleh dicapai dan kebolehskalaan dan kebolehpercayaan sistem boleh dipertingkatkan. Kami boleh mengembangkan pengeluar dan pengguna serta melaksanakan pengimbangan beban berdasarkan keperluan sebenar. RabbitMQ mempunyai fungsi dan kelebihan yang berkuasa dalam bidang pemprosesan tugas teragih, dan layak untuk kajian dan aplikasi yang mendalam oleh pembangun.
Atas ialah kandungan terperinci RabbitMQ dan PHP: Bagaimana untuk melaksanakan pemprosesan tugas teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!