Comment utiliser les microservices PHP pour mettre en œuvre la planification et la répartition distribuées des tâches
Vue d'ensemble :
Avec le développement rapide d'Internet, la planification et la répartition efficaces des tâches sont devenues un problème important auquel sont confrontés de nombreuses entreprises et développeurs. Les applications qui adoptent une architecture de microservices sont mieux à même de gérer la planification et la répartition distribuées des tâches. Cet article explique comment utiliser PHP pour implémenter une architecture de microservices pour la planification et la répartition distribuées des tâches, et fournit des exemples de code spécifiques.
Exemple de code pour le planificateur de tâches :
<?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();
Exemple de code pour l'exécuteur de tâches :
<?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
Exécutez dans la fenêtre du terminal de l'exécuteur de tâches :
$ php worker.php
Les deux applications communiqueront entre elles et termineront le processus de planification et de répartition des tâches.
Conclusion :
Cet article explique comment utiliser les microservices PHP pour implémenter la planification et la répartition distribuées des tâches. En utilisant le système de file d'attente de messages RabbitMQ, nous pouvons facilement mettre en œuvre un traitement asynchrone des tâches et séparer la planification et l'exécution des tâches, améliorant ainsi l'évolutivité et la maintenabilité du système. J'espère que cet article vous sera utile.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!