Maison cadre php PensezPHP Implémentation d'une file d'attente de tâches hautement disponible à l'aide des services RPC construits avec ThinkPHP6 et Swoole

Implémentation d'une file d'attente de tâches hautement disponible à l'aide des services RPC construits avec ThinkPHP6 et Swoole

Oct 12, 2023 pm 02:39 PM
thinkphp rpc服务 swoole

Implémentation dune file dattente de tâches hautement disponible à laide des services RPC construits avec ThinkPHP6 et Swoole

Utilisation des services RPC construits avec ThinkPHP6 et Swoole pour implémenter des files d'attente de tâches à haute disponibilité

[Introduction]
Les files d'attente de tâches jouent un rôle important dans le développement moderne. Elles peuvent séparer les tâches fastidieuses du processus principal et améliorer la réponse. la vitesse du système peut garantir la fiabilité et la haute disponibilité des tâches en cas de panne du système ou d'interruption du réseau. Dans cet article, nous présenterons comment utiliser ThinkPHP6 et Swoole pour créer une file d'attente de tâches hautement disponible afin de mettre en œuvre un traitement de tâches asynchrone, tout en fournissant des services RPC pour la gestion de la file d'attente de tâches.

【Préparation de l'environnement】
Avant de commencer, nous devons préparer certains environnements de développement, notamment :

  1. Environnement PHP, il est recommandé d'utiliser PHP 7.4 et supérieur
  2. Installer Composer pour gérer les dépendances du projet ; Base de données, utilisée pour stocker les informations relatives aux tâches ;
  3. Installer Redis, utilisée pour implémenter la notification et la surveillance en temps réel des files d'attente de tâches ;
  4. Installer l'extension Swoole, utilisée pour implémenter des services RPC hautes performances et le traitement des tâches asynchrones.
  5. 【Construction de projet】

Créer un projet
    Utilisez Composer pour créer un nouveau projet ThinkPHP6.

  1. composer create-project topthink/think hello-think
    Copier après la connexion
Ajouter des dépendances
    Ajoutez les dépendances de Swoole et Swoole-ide-helper dans le fichier composer.json dans le répertoire racine du projet.

  1. "require": {
        "swoole/swoole": "4.6.7",
        "swoole/ide-helper": "4.6.7"
    }
    Copier après la connexion
  2. Ensuite, exécutez la commande
pour installer les dépendances.

composer update

Configurez le service RPC de Swoole et les tâches planifiées
    Créez le fichier de configuration swoole.php dans le répertoire de configuration sous le répertoire racine du projet et ajoutez le contenu suivant :

  1. return [
        'rpc' => [
            'listen_ip' => '0.0.0.0',
            'listen_port' => 9501,
            'worker_num' => 4,
            'task_worker_num' => 4,
        ],
        'task' => [
            'task_ip' => '127.0.0.1',
            'task_port' => 9502,
        ],
        'timer' => [
            'interval' => 1000,
        ],
    ];
    Copier après la connexion
Créez le serveur RPC
    Créez-le dans le répertoire de l'application du projet Un répertoire rpc et créez le répertoire du serveur dans le répertoire rpc. Créez ensuite un fichier TaskServer.php et ajoutez le contenu suivant :

  1. namespace apppcserver;
    
    use SwooleServer;
    use thinkRpcServer;
    use thinkacadeConfig;
    
    class TaskServer
    {
        protected $server;
    
        public function start()
        {
            $this->server = new Server(Config::get('swoole.rpc.listen_ip'), Config::get('swoole.rpc.listen_port'));
    
            $rpcServer = new RpcServer($this->server);
    
            $rpcServer->classMap([
                'apppcserviceTaskService',
            ]);
    
            $rpcServer->start();
        }
      
    }
    Copier après la connexion
Créer un service RPC
    Créez un répertoire de service dans le répertoire rpc et créez un fichier TaskService.php dans le répertoire de service. Dans le fichier TaskService.php, nous définissons certaines méthodes RPC spécifiques, telles que addTask et getTask.

  1. namespace apppcservice;
    
    class TaskService
    {
        public function addTask($data)
        {
            // 处理添加任务的逻辑,将任务添加到任务队列中
        }
    
        public function getTask($id)
        {
            // 处理获取任务的逻辑,从任务队列中获取相关任务信息
        }
    
        // 其他RPC方法...
    }
    Copier après la connexion
  2. [Implémentation de la file d'attente des tâches]

Créer une table de file d'attente des tâches
    Créez une table des tâches dans la base de données MySQL pour stocker les informations relatives aux tâches.

  1. CREATE TABLE `task` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `task_name` varchar(255) DEFAULT NULL,
      `task_data` text,
      `task_status` tinyint(1) DEFAULT NULL,
      `create_time` int(11) DEFAULT NULL,
      `update_time` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `task_status` (`task_status`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    Copier après la connexion
Créer un modèle de tâche
    Créez un fichier Task.php dans le répertoire appmodel et ajoutez le contenu suivant :

  1. namespace appmodel;
    
    use thinkModel;
    
    class Task extends Model
    {
        protected $autoWriteTimestamp = true;
        protected $dateFormat = 'Y-m-d H:i:s';
    }
    Copier après la connexion
Créez une logique de traitement des tâches
    Créez un fichier TaskService.php dans le répertoire appservice et ajoutez le contenu suivant :

  1. namespace appservice;
    
    use appmodelTask;
    
    class TaskService
    {
        public function addTask($data)
        {
            $task = new Task;
            $task->task_name = $data['task_name'];
            $task->task_data = $data['task_data'];
            $task->task_status = 0;
            $task->save();
    
            // TODO: 将任务添加到任务队列中
        }
    
        public function getTask($id)
        {
            return Task::find($id);
        }
    
        // 其他任务处理逻辑...
    }
    Copier après la connexion
Le serveur RPC appelle la logique de traitement des tâches
    Dans la méthode addTask de TaskService.php, nous gérerons la logique d'ajout de tâches, telles que le stockage des tâches dans la base de données, puis l'ajout de tâches à la file d'attente des tâches.

  1. [Implémentation des tâches planifiées]

Créer une logique de traitement des tâches planifiées
    Créez un fichier TimerService.php dans le répertoire appservice et ajoutez le contenu suivant :

  1. namespace appservice;
    
    use appmodelTask;
    use SwooleTimer;
    
    class TimerService
    {
        public function start()
        {
            Timer::tick(config('swoole.timer.interval'), function() {
                // TODO: 定时检查任务队列,处理待执行的任务
            });
        }
      
        // 其他定时任务处理逻辑...
    }
    Copier après la connexion
Ajouter des tâches planifiées dans TaskServer.php
    Dans TaskServer In la méthode de démarrage de .php, ajoutez la logique de démarrage de la tâche planifiée.

  1. public function start()
    {
        $this->server = new Server(Config::get('swoole.rpc.listen_ip'), Config::get('swoole.rpc.listen_port'));
    
        $rpcServer = new RpcServer($this->server);
    
        $rpcServer->classMap([
            'apppcserviceTaskService',
        ]);
    
        $timerService = new TimerService();
        $timerService->start();
    
        $rpcServer->start();
    }
    Copier après la connexion
  2. 【Démarrer le service RPC et la file d'attente des tâches】
Exécutez la commande suivante dans le répertoire racine du projet pour démarrer le service RPC et la file d'attente des tâches.

php think swoole:rpc start
Copier après la connexion

【Exemple d'appel RPC】

Un exemple d'utilisation de RPC pour appeler une file d'attente de tâches dans une application.

class Index extends Controller
{
    public function index()
    {
        $taskService = new pppcserviceTaskService();
        $taskService->addTask([
            'task_name' => '任务名称',
            'task_data' => '任务数据',
        ]);
    }
}
Copier après la connexion

【Résumé】En utilisant ThinkPHP6 et l'extension Swoole, nous pouvons créer un système de file d'attente de tâches hautement disponible. Utilisez les services RPC pour gérer les files d'attente de tâches, fournir des interfaces pour ajouter et obtenir des tâches, réaliser un traitement asynchrone des tâches et améliorer la vitesse de réponse et la disponibilité du système. Dans le même temps, grâce à la fonction de tâches planifiées de Swoole, vous pouvez vérifier régulièrement la file d'attente des tâches et traiter les tâches en attente en temps opportun. Une telle architecture système peut non seulement améliorer les capacités de traitement du système, mais présente également une bonne évolutivité et une bonne tolérance aux pannes.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment exécuter le projet thinkphp Comment exécuter le projet thinkphp Apr 09, 2024 pm 05:33 PM

Pour exécuter le projet ThinkPHP, vous devez : installer Composer ; utiliser Composer pour créer le projet ; entrer dans le répertoire du projet et exécuter php bin/console serve ; visiter http://localhost:8000 pour afficher la page d'accueil.

Il existe plusieurs versions de thinkphp Il existe plusieurs versions de thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP dispose de plusieurs versions conçues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

Comment exécuter thinkphp Comment exécuter thinkphp Apr 09, 2024 pm 05:39 PM

Étapes pour exécuter ThinkPHP Framework localement : Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un hôte virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Comment utiliser la coroutine Swoole dans Laravel Comment utiliser la coroutine Swoole dans Laravel Apr 09, 2024 pm 06:48 PM

L'utilisation des coroutines Swoole dans Laravel peut traiter un grand nombre de requêtes simultanément. Les avantages incluent : Traitement simultané : permet de traiter plusieurs requêtes en même temps. Hautes performances : Basé sur le mécanisme d’événements Linux epoll, il traite efficacement les requêtes. Faible consommation de ressources : nécessite moins de ressources serveur. Facile à intégrer : intégration transparente avec le framework Laravel, simple à utiliser.

Lequel est le meilleur, Swoole ou Workerman ? Lequel est le meilleur, Swoole ou Workerman ? Apr 09, 2024 pm 07:00 PM

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Lequel est le meilleur, Laravel ou thinkphp ? Lequel est le meilleur, Laravel ou thinkphp ? Apr 09, 2024 pm 03:18 PM

Comparaison des performances des frameworks Laravel et ThinkPHP : ThinkPHP fonctionne généralement mieux que Laravel, en se concentrant sur l'optimisation et la mise en cache. Laravel fonctionne bien, mais pour les applications complexes, ThinkPHP peut être mieux adapté.

Comment installer thinkphp Comment installer thinkphp Apr 09, 2024 pm 05:42 PM

Étapes d'installation de ThinkPHP : Préparez les environnements PHP, Composer et MySQL. Créez des projets à l'aide de Composer. Installez le framework ThinkPHP et ses dépendances. Configurez la connexion à la base de données. Générez le code de l'application. Lancez l'application et visitez http://localhost:8000.

Suggestions de développement : Comment utiliser le framework ThinkPHP pour implémenter des tâches asynchrones Suggestions de développement : Comment utiliser le framework ThinkPHP pour implémenter des tâches asynchrones Nov 22, 2023 pm 12:01 PM

"Suggestions de développement : comment utiliser le framework ThinkPHP pour implémenter des tâches asynchrones" Avec le développement rapide de la technologie Internet, les applications Web ont des exigences de plus en plus élevées pour gérer un grand nombre de requêtes simultanées et une logique métier complexe. Afin d'améliorer les performances du système et l'expérience utilisateur, les développeurs envisagent souvent d'utiliser des tâches asynchrones pour effectuer certaines opérations chronophages, telles que l'envoi d'e-mails, le traitement des téléchargements de fichiers, la génération de rapports, etc. Dans le domaine de PHP, le framework ThinkPHP, en tant que framework de développement populaire, offre des moyens pratiques d'implémenter des tâches asynchrones.

See all articles