
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.
- Installez et configurez RabbitMQ
RabbitMQ est un puissant système de file d'attente de messages qui permet aux applications distribuées de mettre en œuvre facilement la transmission et le traitement asynchrones des messages. Tout d’abord, nous devons installer RabbitMQ et configurer les autorisations utilisateur et l’hôte virtuel requis.
- Créer un planificateur de tâches et un exécuteur de tâches
Dans notre architecture de microservices, nous allons créer deux applications PHP différentes, l'une est responsable de la planification des tâches, c'est-à-dire le planificateur de tâches, et l'autre est responsable de l'exécution de tâches spécifiques, à savoir exécuteur de tâches.
Exemple de code pour le planificateur de tâches :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?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();
|
Copier après la connexion
Exemple de code pour l'exécuteur de tâches :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?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
";
$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();
|
Copier après la connexion
- Démarrez et testez le planificateur de tâches et l'exécuteur de tâches
Démarrez le planificateur de tâches et l'exécuteur de tâches respectivement dans la ligne de commande, vous pouvez utiliser une fenêtre de terminal différente . Par exemple, exécutez dans la fenêtre du terminal du planificateur de tâches :
1 | $ php scheduler.php First task
|
Copier après la connexion
Exécutez dans la fenêtre du terminal de l'exécuteur de tâches :
Copier après la connexion
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!