Rumah  >  Artikel  >  pembangunan bahagian belakang  >  RabbitMQ dan PHP: Bagaimana untuk melaksanakan pemprosesan tugas teragih

RabbitMQ dan PHP: Bagaimana untuk melaksanakan pemprosesan tugas teragih

WBOY
WBOYasal
2023-07-19 22:30:201185semak imbas

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

  1. Pasang RabbitMQ
    Pertama, kita perlu memasang RabbitMQ pada pelayan. Anda boleh mendapatkan panduan pemasangan dengan melayari laman web rasmi RabbitMQ (https://www.rabbitmq.com/).
  2. Buat pengeluar dan pengguna
    Dalam PHP, kita boleh menggunakan perpustakaan PhpAmqpLib untuk berkomunikasi dengan RabbitMQ. Pertama, kita perlu mencipta pengeluar yang menukar tugasan kepada mesej dan menghantarnya ke baris gilir mesej:
<?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.

  1. Jalankan pengeluar dan pengguna
    Jalankan kod pengeluar dalam baris arahan untuk menghantar tugas:
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!

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