Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan penjadualan tugas teragih dan penghantaran
Ikhtisar:
Dengan perkembangan pesat Internet, cara menjadualkan dan menghantar tugas dengan cekap telah menjadi isu penting yang dihadapi oleh banyak perusahaan dan pembangun. Aplikasi yang menggunakan seni bina perkhidmatan mikro lebih mampu mengendalikan penjadualan dan penghantaran tugasan teragih. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan seni bina perkhidmatan mikro untuk penjadualan dan penghantaran tugas teragih, serta menyediakan contoh kod khusus.
Contoh kod untuk penjadual tugas:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; // 连接到RabbitMQ主机 $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();
Contoh kod untuk pelaksana tugas:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; use PhpAmqpLibMessageAMQPMessage; // 连接到RabbitMQ主机 $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 "; // 显式确认任务消息已完成 $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); }; // 每次只接受一个任务消息 $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();
$ php scheduler.php First task
Lakukan dalam tetingkap terminal pelaksana tugas:
$ php worker.php
Kedua-dua aplikasi akan berkomunikasi antara satu sama lain dan menyelesaikan proses penjadualan dan penghantaran tugas.
Kesimpulan:
Artikel ini memperkenalkan cara menggunakan perkhidmatan mikro PHP untuk melaksanakan penjadualan dan penghantaran tugas teragih. Dengan menggunakan sistem baris gilir mesej RabbitMQ, kami boleh melaksanakan pemprosesan tak segerak bagi tugas dengan mudah dan penjadualan tugas yang berasingan dan pelaksanaan tugas, meningkatkan kebolehskalaan dan kebolehselenggaraan sistem. Semoga artikel ini bermanfaat kepada anda.
Atas ialah kandungan terperinci Cara menggunakan perkhidmatan mikro PHP untuk melaksanakan penjadualan tugas teragih dan penghantaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!