Cara melaksanakan peruntukan dan penjadualan tugas teragih dalam perkhidmatan mikro PHP
Peruntukan dan penjadualan tugas teragih ialah keperluan biasa apabila membina aplikasi berskala besar. Sebagai bahasa pembangunan web yang biasa digunakan, PHP juga boleh digunakan untuk membina seni bina perkhidmatan mikro dan melaksanakan peruntukan dan penjadualan tugas teragih. Artikel ini akan memperkenalkan cara melaksanakan peruntukan tugas dan penjadualan teragih dalam perkhidmatan mikro PHP dan menyediakan contoh kod khusus.
1. Peruntukan tugas teragih
Dalam pengagihan tugasan teragih, terdapat penerbit tugasan yang menerbitkan tugasan ke baris gilir tugas, dan kemudian pengguna berbilang tugas memproses tugasan ini. Dalam PHP, baris gilir boleh digunakan untuk melaksanakan pengagihan tugas. Perkhidmatan baris gilir yang biasa digunakan termasuk RabbitMQ dan Redis.
Terbitkan contoh kod tugas:
<?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(); ?>
Terima contoh kod tugas:
<?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLibConnectionAMQPStreamConnection; $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 ($channel->is_consuming()) { $channel->wait(); } $channel->close(); $connection->close(); ?>
Terbitkan contoh kod tugas:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $data = implode(' ', array_slice($argv, 1)); if (empty($data)) { $data = "Hello World!"; } $redis->lPush('task_queue', $data); echo " [x] Sent $data "; ?>
Terima contoh kod tugas:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo " [*] Waiting for messages. To exit, press CTRL+C "; while (true) { $data = $redis->brPop('task_queue', 0); echo ' [x] Received ', $data[1], " "; sleep(substr_count($data[1], '.')); echo " [x] Done "; } ?>
Contoh kod di atas boleh menerbitkan tugasan ke baris gilir, dan kemudian memproses tugasan ini oleh berbilang pengguna. Bilangan pengguna boleh ditambah mengikut keperluan sebenar untuk mencapai pemprosesan tugas teragih.
2. Penjadualan Tugas Teragih
Penjadualan tugas teragih bermakna dalam sistem teragih, tugasan diberikan kepada nod yang sesuai untuk dilaksanakan mengikut peraturan tugasan yang khusus. Dalam PHP, anda boleh menggunakan penjadual tugas untuk melaksanakan penjadualan tugas teragih. Penjadual tugas yang biasa digunakan termasuk penjadual tugas Laravel dan Cron.
Tulis fail skrip:
<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; class ProcessTask extends Command { protected $signature = 'task:process'; protected $description = 'Process tasks'; public function __construct() { parent::__construct(); } public function handle() { // 处理任务的代码 } }
Tetapkan ungkapan Cron:
<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected $commands = [ CommandsProcessTask::class, ]; protected function schedule(Schedule $schedule) { $schedule->command('task:process')->everyMinute(); } protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan peruntukan tugas teragih dan penjadualan dalam perkhidmatan mikro PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!