Position actuelle: Accueil> Derniers articles> Méthodes pratiques et exemples pour l'envoi de messages retardés dans la file d'attente PHP

Méthodes pratiques et exemples pour l'envoi de messages retardés dans la file d'attente PHP

M66 2025-07-23

L'envoi retardé de messages est réalisé via la file d'attente PHP

Au cours du processus de développement, la nécessité de retarder l'envoi de messages est très courante, comme pousser les codes de vérification SMS, les notifications système, etc. L'utilisation des files d'attente de PHP peut réaliser efficacement l'envoi du retard des messages, et l'effet du traitement asynchrone est réalisé en mettant des messages dans la file d'attente et en définissant le délai. Cet article présentera la solution à l'utilisation de Redis comme serveur de file d'attente et est équipé d'un code d'échantillon PHP complet pour vous aider à démarrer rapidement.

Utilisez Redis comme serveur de file d'attente

Redis est une base de données en mémoire haute performance qui prend en charge une variété de structures de données, y compris des listes et des collections ordonnées, idéales pour une utilisation comme file d'attente de messages. Tout d'abord, vous devez installer Redis et l'extension PHP correspondante sur le serveur. Sur le système Ubuntu, vous pouvez utiliser la commande suivante pour installer:

 sudo apt-get install redis-server
sudo apt-get install php-redis

Une fois l'installation terminée, le code suivant montre comment se connecter au serveur Redis:

 $ redis = new redis ();
$ redis-> connect ('127.0.0.1', 6379);

Implémenter l'envoi retardé de messages

L'exemple suivant montre comment ajouter un message à une file d'attente Redis et définir un temps d'envoi retardé lors de l'interrogation et de l'envoi d'un message expiré:

 // Ajouter des messages à la file d'attente et définir le temps de retard (secondes)
fonction adddelayedMessage ($ message, $ delay)
{
    Global $ redis;

    // Calculez l'horodatage d'envoi du message $ de retard = time () + $ retard;

    // Ajouter le message à l'ensemble commandé, le score est le temps d'envoi $ redis-> zadd ('retarded_queue', $ retardedtime, $ message);
}

// Vérifiez et envoyez une fonction de message d'expiration CheckDelayEdMessages ()
{
    Global $ redis;

    while (true) {
        // Obtenez le message qui doit être envoyé avant l'heure actuelle $ message = $ redis-> zRangeBysCore ('Delayed_queue', 0, time (), ['limit' => [0, 1]]);

        if (count ($ message)> 0) {
            // Ici, utilisez Echo pour simuler le fonctionnement de l'envoi de messages Echo "Envoyer le message:". $ message [0]. Php_eol;

            // Supprime le message envoyé $ redis-> zrem ('retarded_queue', $ message [0]);
        } autre {
            // Pas de messages à envoyer, sortir de la boucle;
        }
    }
}

// Ajouter le message d'échantillon de retard adddelayedMessage ('Message 1', 300); // Envoyer AdddelayedMessage ('Message 2', 600); // Envoyez 10 minutes plus tard // ENVOYER CHECKDELAYEDMESSAGES ();

Dans le code ci-dessus, la fonction adddelayedMessage ajoute le message à l'ensemble ordonné redis, et le score est défini sur un certain point dans le temps dans le futur (c'est-à-dire le temps de retard), pour réaliser l'effet de retard. La fonction CheckDelayEdMessages vérifie en continu les messages avant l'heure actuelle, les supprime de la file d'attente après l'envoi de la simulation, garantissant que les messages ne sont pas envoyés à plusieurs reprises.

Résumer

En combinant PHP et Redis pour implémenter les files d'attente de messages, les exigences d'envoi de retard de message peuvent être gérées efficacement. Les collections commandées par Redis offrent des fonctions de tri de temps très commode, ce qui rend la gestion des messages retardés simples et intuitifs. La maîtrise de cette solution peut considérablement améliorer les capacités de traitement et les performances asynchrones du système.