Maison  >  Article  >  développement back-end  >  Comment utiliser les microservices PHP pour implémenter la planification et la répartition distribuées des tâches

Comment utiliser les microservices PHP pour implémenter la planification et la répartition distribuées des tâches

WBOY
WBOYoriginal
2023-09-25 09:41:091342parcourir

Comment utiliser les microservices PHP pour implémenter la planification et la répartition distribuées des tâches

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.

  1. 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.
  2. 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 :

<?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();
  1. 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 :
$ 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!

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