Cara menangani penjadualan dan pemprosesan tugas teragih dalam pembangunan PHP
Dengan pembangunan berterusan dan pertumbuhan aplikasi Internet, penjadualan tugas dan pemprosesan telah menjadi semakin penting dalam pembangunan berskala besar Sistem teragih menjadi semakin kompleks pada skala. Untuk mengendalikan tugas yang diagihkan dengan cekap dan boleh dipercayai, pembangun perlu mereka bentuk dan melaksanakan penyelesaian dengan teliti. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mengendalikan penjadualan dan pemprosesan tugas yang diedarkan, sambil menyediakan beberapa contoh kod khusus.
Baris gilir mesej ialah penyelesaian biasa untuk penjadualan dan pemprosesan tugas yang diedarkan. Dalam pembangunan PHP, anda boleh menggunakan perisian tengah baris gilir mesej seperti RabbitMQ, ActiveMQ atau Kafka.
Pertama, pasang perisian tengah baris gilir mesej yang sepadan. Mengambil RabbitMQ sebagai contoh, anda boleh memasang pakej pergantungan PHP yang berkaitan melalui Komposer:
composer require php-amqplib/php-amqplib
Kemudian, buat contoh kod untuk pengeluar menghantar tugasan:
<?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); $message = new AMQPMessage('任务', ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]); $channel->basic_publish($message, '', 'task_queue'); echo "任务已发送 "; $channel->close(); $connection->close(); ?>
Kemudian, cipta contoh Kod pengguna untuk pemproses untuk memproses 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 "等待任务... "; $callback = function ($message) { echo "接收到任务: " . $message->body . " "; // 处理任务的代码逻辑 sleep(5); // 模拟任务处理时间 echo "任务完成 "; $message->delivery_info['channel']->basic_ack($message->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(); ?>
Selain menggunakan baris gilir mesej, anda juga boleh menggunakan beberapa rangka kerja penjadualan tugas teragih sumber terbuka untuk memudahkan pembangunan. Dalam pembangunan PHP, anda boleh menggunakan Penjadualan Tugas Laravel (penjadualan tugas) dan Horizon (pemprosesan tugas) untuk mencapai ini.
Pertama, pasang rangka kerja Laravel dan pakej sambungan Horizon. Mengambil Komposer sebagai contoh, laksanakan arahan berikut:
composer require laravel/framework composer require laravel/horizon
Kemudian, konfigurasikan penjadualan tugas dan Horizon. Dalam fail app/Console/Kernel.php
Laravel, anda boleh menentukan peraturan penjadualan tugas dan logik pemprosesan. Contohnya adalah seperti berikut: app/Console/Kernel.php
文件中,可以定义任务的调度规则和处理逻辑。示例如下:
<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected $commands = [ // ]; protected function schedule(Schedule $schedule) { $schedule->command('email:send')->daily(); } protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
接着,运行Horizon的进程来处理任务。执行以下命令:
php artisan horizon
以上代码示例中,每天会调度执行email:send
<?php $hadoop = new Hadoop(); $hadoop->putFile('/path/to/input/file', '/input/file.txt'); $hadoop->submitJob('/path/to/hadoop/job', '/input/file.txt', '/output/file.txt'); $jobId = $hadoop->getJobId(); echo "任务已提交,Job ID: " . $jobId . " "; $result = $hadoop->getResult('/output/file.txt'); echo "任务结果: " . $result . " "; ?>
email:send
dijadualkan untuk dilaksanakan setiap hari. Horizon memantau dan mengendalikan tugas secara automatik. Gunakan rangka kerja pengkomputeran teragih
Selain itu, beberapa rangka kerja pengkomputeran teragih juga boleh digunakan untuk mengendalikan tugas yang diedarkan. Contohnya, gunakan Apache Hadoop untuk melaksanakan penjadualan dan pemprosesan tugas teragih. Pertama, pasang dan konfigurasikan kelompok Hadoop. Terdapat banyak persediaan dan keluk pembelajaran yang terlibat di sini, dan langkah pemasangan dan konfigurasi khusus belum disediakan lagi. Kemudian, tulis kod PHP untuk menyerahkan tugas kepada kelompok Hadoop. Kod sampel adalah seperti berikut: #🎜🎜#rrreee#🎜🎜#Di atas adalah beberapa contoh pengendalian penjadualan dan pemprosesan tugas teragih Kaedah pelaksanaan tertentu mungkin berbeza mengikut keperluan sebenar dan kerumitan seni bina sistem. Sama ada anda menggunakan baris gilir mesej, rangka kerja penjadualan tugas teragih atau rangka kerja pengkomputeran teragih, anda harus memilih penyelesaian yang paling sesuai berdasarkan keperluan dan skala projek, dan melakukan pengoptimuman prestasi dan penyahpepijatan yang sesuai. #🎜🎜#Atas ialah kandungan terperinci Cara mengendalikan penjadualan dan pemprosesan tugas teragih dalam pembangunan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!