Maison  >  Article  >  développement back-end  >  Comment implémenter le développement asynchrone de fonctions PHP à l'aide de microservices ?

Comment implémenter le développement asynchrone de fonctions PHP à l'aide de microservices ?

王林
王林original
2023-09-18 14:30:111217parcourir

Comment implémenter le développement asynchrone de fonctions PHP à laide de microservices ?

Comment implémenter le développement asynchrone de fonctions PHP à l'aide de microservices ?

Avec le développement rapide d'Internet, les besoins des entreprises sont devenus de plus en plus complexes, imposant des exigences plus élevées en matière de performances du système et d'expérience utilisateur. Dans le développement PHP, l'implémentation asynchrone est devenue une tendance. L'architecture de microservices est un moyen de créer des systèmes distribués qui facilitent l'extension et la maintenance du système en le divisant en plusieurs services indépendants. Cet article expliquera comment utiliser les microservices pour implémenter le développement asynchrone de fonctions PHP et donnera des exemples de code spécifiques.

  1. Présentation de l'architecture des microservices
    L'architecture des microservices est un style architectural orienté services qui divise une application en plusieurs petits services. Chaque service peut être déployé et exécuté indépendamment. Chaque microservice possède son propre magasin de données et peut communiquer via des API. L'idée centrale de l'architecture des microservices est le fractionnement des services et la communication des services.
  2. Avantages du développement asynchrone
    Le développement asynchrone peut améliorer les performances de concurrence et la vitesse de réponse du système. Dans le modèle de développement synchrone traditionnel, chaque requête doit attendre que le traitement de la requête précédente soit terminé avant de passer à l'étape suivante, ce qui entraînera une réponse lente du système. En mode de développement asynchrone, plusieurs requêtes peuvent être traitées en même temps, améliorant ainsi les capacités de traitement simultané du système. De plus, le développement asynchrone peut également réaliser un découplage des tâches via des files d'attente de messages, améliorant ainsi l'évolutivité et la stabilité du système.
  3. Utiliser la file d'attente des messages
    La file d'attente des messages est un moyen courant de réaliser un développement asynchrone. Il existe de nombreux composants de file d'attente de messages open source parmi lesquels choisir en PHP, tels que RabbitMQ, Kafka, etc. Ce qui suit prend RabbitMQ comme exemple pour présenter comment utiliser les files d'attente de messages pour réaliser un développement asynchrone.

Tout d'abord, nous devons installer le serveur RabbitMQ et utiliser la bibliothèque client RabbitMQ dans le projet PHP. Vous pouvez utiliser composer pour gérer les dépendances du projet et exécuter la commande suivante pour installer :

composer require php-amqplib/php-amqplib

Une fois l'installation terminée, nous pouvons commencer à utiliser RabbitMQ dans le projet PHP.

  1. Modèles de producteur et de consommateur
    Lorsque vous utilisez des files d'attente de messages pour implémenter un développement asynchrone, vous devez généralement utiliser les modèles de producteur et de consommateur. Les producteurs sont responsables de l'envoi des messages à la file d'attente des messages, tandis que les consommateurs reçoivent les messages de la file d'attente des messages et les traitent.

Tout d'abord, nous créons un producteur et envoyons un message à la file d'attente :

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('hello', false, false, false, false);

$message = new AMQPMessage('Hello World!');
$channel->basic_publish($message, '', 'hello');

echo " [x] Sent 'Hello World!'
";

$channel->close();
$connection->close();

Ensuite, nous créons un consommateur, récupérons le message de la file d'attente et le traitons :

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('hello', false, false, false, false);

echo " [*] Waiting for messages. To exit press CTRL+C
";

$callback = function ($message) {
  echo ' [x] Received ', $message->body, "
";
};

$channel->basic_consume('hello', '', false, true, false, false, $callback);

while (count($channel->callbacks)) {
  $channel->wait();
}

$channel->close();
$connection->close();

Avec le code ci-dessus, nous pouvons voir Le producteur envoie un message à la file d'attente et le consommateur obtient le message via la fonction de rappel et le traite. De cette manière, nous mettons en œuvre un modèle simple de producteur et de consommateur.

  1. Combiné à une architecture de microservices
    Dans le développement réel, chaque service peut être divisé en microservices indépendants, et chaque microservice a sa propre file d'attente de messages. Lorsqu'un service doit appeler d'autres services, il peut envoyer directement la demande à la file d'attente de messages de l'autre service, puis l'autre service obtient la demande de la file d'attente de messages et la traite.

Ce qui suit prend comme exemple un service utilisateur simple et un service de commande pour montrer comment utiliser les files d'attente de messages pour réaliser un développement asynchrone dans une architecture de microservices.

Tout d'abord, nous créons un service utilisateur, qui se charge de traiter les demandes d'inscription des utilisateurs :

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('register', false, false, false, false);

$message = new AMQPMessage(json_encode(['username' => 'example', 'password' => '123456']));
$channel->basic_publish($message, '', 'register');

echo " [x] Sent 'Register Request'
";

$channel->close();
$connection->close();

Ensuite, nous créons un service de commande, qui s'abonne aux demandes d'inscription des utilisateurs et génère une nouvelle commande :

<?php

require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('register', false, false, false, false);

echo " [*] Waiting for register requests. To exit press CTRL+C
";

$callback = function ($message) {
  $data = json_decode($message->body, true);
  // 处理注册请求,生成订单等操作
  echo ' [x] Received Register Request: ', $message->body, "
";
};

$channel->basic_consume('register', '', false, true, false, false, $callback);

while (count($channel->callbacks)) {
  $channel->wait();
}

$channel->close();
$connection->close();

Par le code ci-dessus, le service utilisateur envoie la demande d'enregistrement à la file d'attente de messages, et le service de commande traite la demande d'enregistrement après l'avoir reçue. De cette manière, nous avons mis en place une communication simple entre le service utilisateur et le service commande.

Résumé :

En utilisant l'architecture de microservices et la file d'attente de messages, le développement asynchrone des fonctions PHP peut être réalisé. Divisez le système en plusieurs microservices, chaque microservice possède sa propre file d'attente de messages et communique via la file d'attente de messages. Cela peut améliorer les performances de concurrence et la vitesse de réponse du système, réaliser un découplage des tâches et améliorer la stabilité et l'évolutivité du système. J'espère que cet article vous aidera à comprendre le développement asynchrone de microservices.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn