Maison cadre php Swoole Intégration pratique de Swoole et RabbitMQ : amélioration des performances de traitement des files d'attente de messages

Intégration pratique de Swoole et RabbitMQ : amélioration des performances de traitement des files d'attente de messages

Jun 15, 2023 am 09:45 AM
集成 rabbitmq swoole

Avec le développement continu du commerce Internet, les files d'attente de messages sont devenues un élément indispensable de nombreux systèmes. En utilisation réelle, les performances des files d'attente de messages traditionnelles ne sont pas idéales dans des conditions de concurrence élevée et de débit élevé. Ces dernières années, Swoole et RabbitMQ sont devenus deux technologies qui ont beaucoup retenu l'attention. Leur intégration peut offrir une meilleure garantie des performances de traitement des files d'attente de messages.

Cet article présentera les principes de base de Swoole et RabbitMQ, et combiné à des cas réels, explorera comment utiliser leur intégration pour améliorer les performances de traitement des files d'attente de messages.

1. Introduction à Swoole

Swoole est une extension PHP écrite en langage C++. Elle fournit une série d'outils et d'API puissants, permettant à PHP d'effectuer une programmation asynchrone comme Node.js. En plus de fournir des fonctionnalités telles que les E/S asynchrones, les coroutines et la haute concurrence, Swoole fournit également de nombreuses fonctions liées à la programmation réseau, telles que l'encapsulation du protocole TCP/UDP, le serveur HTTP, le serveur WebSocket, etc.

Les principales fonctionnalités de Swoole incluent :

  1. Utiliser le mode IO asynchrone + multi-processus pour améliorer les performances de concurrence
  2. Fournir des fonctionnalités de programmation coroutine pour éviter certains problèmes de multi-threading
  3. Compatible avec les programmes PHP traditionnels, fournir une API via swoole extension
  4. Prise en charge multiplateforme, adaptée à Linux, Windows et autres plates-formes

2. Introduction à RabbitMQ

RabbitMQ est une file d'attente de messages open source qui atteint des performances élevées, une fiabilité élevée, une évolutivité et d'autres fonctionnalités, et est largement utilisée. dans les systèmes distribués. RabbitMQ est basé sur le protocole AMQP et implémente la distribution des messages via une combinaison de files d'attente et de commutateurs.

Les principales fonctionnalités de RabbitMQ incluent :

  1. Haute disponibilité, prise en charge des files d'attente miroir et de la synchronisation des données entre les nœuds
  2. Fiabilité, offrant plusieurs modes de livraison de messages, tels que le mécanisme de confirmation ACK et le mécanisme de persistance
  3. Flexibilité, prise en charge de plusieurs langues​ ​et protocoles, tels que AMQP, STOMP, MQTT, etc.
  4. Évolutivité, prenant en charge le déploiement distribué de nœuds

Trois Intégration avec Swoole et RabbitMQ

L'idée principale de l'intégration de Swoole et RabbitMQ est de l'utiliser dans. le serveur Swoole Le client RabbitMQ se connecte au serveur RabbitMQ, puis utilise les fonctionnalités d'E/S asynchrones et de coroutine fournies par Swoole pour obtenir une concurrence élevée et un traitement à haut débit de la file d'attente de messages.

Ce qui suit est un exemple de code simple pour se connecter au serveur RabbitMQ, créer des commutateurs et des files d'attente, envoyer et recevoir des messages sur le serveur Swoole.

// 连接RabbitMQ服务器
$client = new PhpAmqpLibConnectionAMQPStreamConnection($host, $port, $username, $password, $vhost);

// 创建一个通道
$channel = $client->channel();

// 定义交换机和队列
$channel->exchange_declare($exchange, 'direct', false, true, false);
$channel->queue_declare($queue, false, true, false, false);
$channel->queue_bind($queue, $exchange);

// 发送消息
$msg = new PhpAmqpLibMessageAMQPMessage('hello world');
$channel->basic_publish($msg, $exchange);

// 接收消息
$callback = function ($msg) {
    echo $msg->body;
};
$channel->basic_consume($queue, '', false, true, false, false, $callback);

// 运行事件循环
while (count($channel->callbacks)) {
    $channel->wait();
}
Copier après la connexion

En utilisation réelle, nous créons généralement un processus Swoole Worker spécifiquement pour le traitement des files d'attente de messages et le démarrons via la méthode de processus fournie par Swoole. Voici un exemple de code simplifié :

$worker = new SwooleProcess(function () {
    // 连接RabbitMQ服务器
    $client = new PhpAmqpLibConnectionAMQPStreamConnection($host, $port, $username, $password, $vhost);
    $channel = $client->channel();
    $channel->exchange_declare($exchange, 'direct', false, true, false);
    $channel->queue_declare($queue, false, true, false, false);
    $channel->queue_bind($queue, $exchange);

    // 接收消息
    $callback = function ($msg) {
        // 处理消息
        echo $msg->body;
    };
    $channel->basic_consume($queue, '', false, true, false, false, $callback);

    while (true) {
        $channel->wait();
    }
});

$worker->start();
Copier après la connexion

IV. Intégration pratique de Swoole et RabbitMQ

Dans les applications pratiques, nous pouvons l'appliquer au traitement des files d'attente de messages, telles que les tâches de traitement asynchrone, etc. Ce qui suit est un exemple simple de traitement asynchrone de la tâche de mise à l'échelle de l'image.

// 连接RabbitMQ服务器
$client = new PhpAmqpLibConnectionAMQPStreamConnection($host, $port, $username, $password, $vhost);
$channel = $client->channel();
$channel->exchange_declare($exchange, 'direct', false, true, false);
$channel->queue_declare($queue, false, true, false, false);
$channel->queue_bind($queue, $exchange);

// 发送消息
$msg = new PhpAmqpLibMessageAMQPMessage(json_encode(['image_url' => 'http://example.com/image.jpg', 'size' => [200, 200]]));
$channel->basic_publish($msg, $exchange);

// 创建Swoole Worker进程
$worker = new SwooleProcess(function () use ($channel, $queue) {
    // 连接RabbitMQ服务器
    $client = new PhpAmqpLibConnectionAMQPStreamConnection($host, $port, $username, $password, $vhost);
    $channel = $client->channel();
    $channel->queue_declare($queue . '_result', false, true, false, false);

    // 接收消息
    $callback = function ($msg) use ($channel) {
        // 处理消息
        $data = json_decode($msg->body, true);
        $image = file_get_contents($data['image_url']);
        $image = imagecreatefromstring($image);
        $size = $data['size'];
        $width = imagesx($image);
        $height = imagesy($image);
        $new_image = imagecreatetruecolor($size[0], $size[1]);
        imagecopyresized($new_image, $image, 0, 0, 0, 0, $size[0], $size[1], $width, $height);
        ob_start();
        imagejpeg($new_image);
        $result = ob_get_clean();

        // 发送结果
        $msg = new PhpAmqpLibMessageAMQPMessage($result);
        $channel->basic_publish($msg, '', $queue . '_result');
        $channel->basic_ack($msg->delivery_info['delivery_tag']);
    };
    $channel->basic_consume($queue, '', false, false, false, false, $callback);

    // 运行事件循环
    while (true) {
        $channel->wait();
    }
});

$worker->start();
Copier après la connexion

Dans l'exemple de code ci-dessus, nous envoyons d'abord un message au format JSON au processus principal, comprenant l'URL et la taille requise de l'image qui doit être traitée. Nous avons ensuite créé un processus Swoole Worker pour traiter les messages et nous sommes connectés à la file d'attente via le client RabbitMQ. Dans le processus, nous définissons une fonction de rappel de traitement et écoutons les messages de la file d'attente via la méthode basic_consume. Lors de la réception d'un message, nous analysons le message au format JSON, obtenons l'image et la taille et le traitons, puis envoyons le résultat vers une autre file d'attente via la méthode basic_publish. Une fois l'envoi terminé, nous confirmons l'achèvement du traitement du message via. la méthode basic_ack.

De cette façon, nous pouvons facilement utiliser Swoole et RabbitMQ pour implémenter un traitement de file d'attente de messages haute performance, optimisant ainsi les performances de l'ensemble du système.

5. Résumé

Cet article présente les principes de base de Swoole et RabbitMQ et combine des cas pratiques pour explorer comment utiliser leur intégration pour obtenir un traitement de file d'attente de messages haute performance. En utilisation réelle, nous devons optimiser en fonction de scénarios spécifiques, tels que la répartition raisonnable des tâches, l'utilisation du cache, etc., pour améliorer les performances de l'ensemble du système.

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
4 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 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.

Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Nov 07, 2023 am 08:18 AM

Comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances Swoole est un framework de communication réseau hautes performances, asynchrone et simultané basé sur le langage PHP. Il fournit une série de fonctions réseau et peut être utilisé pour implémenter des serveurs HTTP, des serveurs WebSocket, etc. Dans cet article, nous présenterons comment utiliser Swoole pour implémenter un serveur proxy inverse HTTP hautes performances et fournirons des exemples de code spécifiques. Configuration de l'environnement Tout d'abord, nous devons installer l'extension Swoole sur le serveur

Comment migrer et intégrer des projets dans GitLab Comment migrer et intégrer des projets dans GitLab Oct 27, 2023 pm 05:53 PM

Comment migrer et intégrer des projets dans GitLab Introduction : Dans le processus de développement logiciel, la migration et l'intégration de projets sont une tâche importante. En tant que plate-forme d'hébergement de code populaire, GitLab fournit une série d'outils et de fonctions pratiques pour prendre en charge la migration et l'intégration de projets. Cet article présentera les étapes spécifiques de la migration et de l'intégration du projet dans GitLab, et fournira quelques exemples de code pour aider les lecteurs à mieux comprendre. 1. Migration de projet La migration de projet consiste à migrer la base de code existante d'un système de gestion de code source vers GitLab

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.

Comment swoole_process permet-il aux utilisateurs de changer ? Comment swoole_process permet-il aux utilisateurs de changer ? Apr 09, 2024 pm 06:21 PM

Swoole Process permet aux utilisateurs de changer. Les étapes spécifiques sont les suivantes : créer un processus ; définir l'utilisateur du processus pour démarrer le processus ;

Lequel a les meilleures performances, swoole ou java ? Lequel a les meilleures performances, swoole ou java ? Apr 09, 2024 pm 07:03 PM

Comparaison des performances : Débit : Swoole a un débit plus élevé grâce à son mécanisme de coroutine. Latence : la commutation de contexte de coroutine de Swoole a une surcharge et une latence plus faibles. Consommation de mémoire : les coroutines de Swoole occupent moins de mémoire. Facilité d'utilisation : Swoole fournit une API de programmation simultanée plus facile à utiliser.

Comment redémarrer le service dans le framework swoole Comment redémarrer le service dans le framework swoole Apr 09, 2024 pm 06:15 PM

Pour redémarrer le service Swoole, procédez comme suit : Vérifiez l'état du service et obtenez le PID. Utilisez "kill -15 PID" pour arrêter le service. Redémarrez le service en utilisant la même commande que celle utilisée pour démarrer le service.

Analyse de la stratégie d'intégration des API Oracle : parvenir à une communication transparente entre les systèmes Analyse de la stratégie d'intégration des API Oracle : parvenir à une communication transparente entre les systèmes Mar 07, 2024 pm 10:09 PM

Analyse de la stratégie d'intégration de l'API Oracle : pour parvenir à une communication transparente entre les systèmes, des exemples de code spécifiques sont nécessaires. À l'ère numérique d'aujourd'hui, les systèmes internes de l'entreprise doivent communiquer entre eux et partager des données, et l'API Oracle est l'un des outils importants pour contribuer à une communication transparente. communication entre les systèmes. Cet article commencera par les concepts et principes de base d'OracleAPI, explorera les stratégies d'intégration d'API et enfin donnera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer OracleAPI. 1. API Oracle de base

See all articles