Maison >développement back-end >tutoriel php >Application de la technologie de file d'attente au filtrage des messages et au middleware de messages en PHP et MySQL
Application de la technologie de file d'attente dans le filtrage des messages et le middleware de messages en PHP et MySQL
Introduction :
Avec le développement rapide d'Internet, nos applications ne sont plus de simples pages Web, mais impliquent un grand nombre de tâches asynchrones et messagerie. Pour rendre nos applications plus robustes et efficaces, la technologie de file d’attente devient un outil essentiel. Cet article présentera l'application de la technologie de file d'attente dans le filtrage des messages et le middleware de messages dans PHP et MySQL, et fournira des exemples de code spécifiques.
1. Le concept de filtrage des messages :
Le filtrage des messages fait référence au filtrage et au filtrage des messages selon des conditions spécifiées, de sorte que les applications ne puissent traiter que les messages qui remplissent les conditions et améliorent l'efficacité du traitement. En PHP, nous pouvons utiliser la base de données MySQL pour implémenter le filtrage des messages.
Tout d'abord, nous devons créer une table de messages dans la base de données MySQL pour stocker les messages en attente. La structure de la table des messages est la suivante :
CREATE TABLE `messages` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `message` VARCHAR(255) NOT NULL, `status` TINYINT(1) NOT NULL DEFAULT '0', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
La table des messages contient les champs suivants :
Ensuite, nous devons insérer des messages en attente dans le tableau des messages. L'exemple de code suivant peut être utilisé :
<?php // 连接数据库 $mysqli = new mysqli("localhost", "username", "password", "database"); // 插入消息 $query = "INSERT INTO messages (message) VALUES ('Message 1'), ('Message 2'), ('Message 3')"; $mysqli->query($query); // 关闭数据库连接 $mysqli->close(); ?>
Le code ci-dessus insérera trois messages en attente dans la table des messages.
Ensuite, nous devons écrire un script PHP pour filtrer et traiter les messages. L'exemple de code spécifique est le suivant :
<?php // 连接数据库 $mysqli = new mysqli("localhost", "username", "password", "database"); // 获取未处理的消息 $query = "SELECT * FROM messages WHERE status = 0"; $result = $mysqli->query($query); // 处理消息 while ($row = $result->fetch_assoc()) { $message = $row['message']; // 处理消息的代码 // ... // 标记为已处理 $query = "UPDATE messages SET status = 1 WHERE id = {$row['id']}"; $mysqli->query($query); } // 关闭数据库连接 $mysqli->close(); ?>
Le code ci-dessus récupère d'abord les messages non traités, puis traite les messages un par un et les marque comme traités. La logique de traitement des messages peut être écrite en fonction des besoins réels.
2. Le concept de middleware de messages :
Le middleware de messages fait référence à un mécanisme utilisé pour transmettre des messages et effectuer une communication asynchrone dans un système distribué. En PHP, nous pouvons utiliser des bibliothèques tierces pour implémenter les fonctions de middleware de messages. Ce qui suit utilise RabbitMQ comme exemple à présenter.
Tout d'abord, nous devons installer l'extension PHP RabbitMQ. Il peut être installé à l'aide de la commande suivante :
$ pecl install amqp
Ensuite, nous devons écrire un script PHP pour envoyer le message. L'exemple de code spécifique est le suivant :
<?php // 创建连接 $connection = new AMQPConnection([ 'host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest' ]); $connection->connect(); // 创建通道 $channel = new AMQPChannel($connection); // 创建交换机 $exchange = new AMQPExchange($channel); $exchange->setName('my_exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); // 直连交换机 $exchange->declareExchange(); // 创建消息 $message = 'Hello, RabbitMQ'; // 发布消息 $exchange->publish($message, 'my_routing_key'); // 关闭连接 $connection->disconnect(); ?>
Dans le code ci-dessus, nous créons d'abord une connexion, puis créons un canal et un commutateur, et déclarons le type de commutateur. Nous avons ensuite créé un message et l'avons publié à l'aide de la clé de routage spécifiée. Le type de commutateur et la clé de routage appropriés peuvent être sélectionnés en fonction des besoins réels.
Ensuite, nous devons écrire un script PHP pour consommer des messages. L'exemple de code spécifique est le suivant :
<?php // 创建连接 $connection = new AMQPConnection([ 'host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest' ]); $connection->connect(); // 创建通道 $channel = new AMQPChannel($connection); // 创建交换机 $exchange = new AMQPExchange($channel); $exchange->setName('my_exchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); // 直连交换机 $exchange->declareExchange(); // 创建队列 $queue = new AMQPQueue($channel); $queue->setName('my_queue'); $queue->declareQueue(); $queue->bind('my_exchange', 'my_routing_key'); // 消费消息 while ($message = $queue->get()) { $message->ack(); // 处理消息的代码 // ... } ?>
Dans le code ci-dessus, nous créons d'abord une connexion, puis créons un canal et un commutateur, et déclarons le type de commutateur. Nous avons ensuite créé une file d'attente et l'avons liée au commutateur. Enfin, nous consommons les messages de la file d'attente en boucle et traitons chaque message.
Conclusion :
Grâce aux exemples de code ci-dessus, nous pouvons voir l'application de la technologie de file d'attente dans le filtrage des messages et le middleware de messages en PHP et MySQL. Le filtrage des messages peut nous aider à traiter efficacement les messages en attente et à améliorer les performances des applications. Le middleware de messages peut nous aider à mettre en œuvre une communication asynchrone et la livraison de messages dans des systèmes distribués. Bien entendu, l’exemple de code ci-dessus n’est que la base, et vous pouvez l’optimiser et l’étendre en fonction de vos propres besoins. J'espère que cet article vous aidera !
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!