Exigences/scénarios :
Par exemple, définissez un article à publier le 2018-5-22 13:51:16.
Avertissez-moi dans trois jours.
Les messages sont automatiquement supprimés après leur expiration.
……
Attendez, ce type de demande consiste à faire quelque chose automatiquement à un certain moment. Cela semble n'avoir rien à voir avec la file d'attente. Cela nécessite-t-il un middleware ou un autre moment, ou un processus résident ou quelque chose du genre.
Je crois comprendre que les tâches à effectuer sont placées dans un tableau ligne par ligne, puis qu'un processus est continuellement actualisé et que les tâches qui répondent au nœud temporel sont supprimées et exécutées.
Vous voulez savoir de quoi est faite la solution mature pour ce scénario ?
Merci ^_^
Utilisez des tâches différées, https://github.com/ouqiang/go...
Comment mettre en œuvre des tâches différées
Implémentez-le vous-même, utilisez la roue du temps ou un petit tas de racines
Utilisez la notification Redis Keyspace
beanstalkd
L'élément principal de l'affiche devrait être DelayQueue, qui est le service de file d'attente de messages retardés. Pour des scénarios spécifiques, veuillez vous référer à :
1 Le service d'annulation automatique de commande de Taobao
2 Le service de notification par SMS de commande d'Ele.me, etc.
Implémentez une minuterie basée sur la méthode d'attente/notification.
Utilisez simplement le programme pour continuer à brosser = =
Vous pouvez utiliser les tâches planifiées crontab pour le résoudre et vous pouvez concevoir l'interface Php pour qu'elle soit appelée tous les jours, heures et minutes.
Ajoutez un champ temporel, puis portez des jugements pertinents au niveau de la couche modèle
Brossage du programme, mais la pression de la base de données doit être prise en compte.
Vous pouvez placer toutes les tâches dans la file d'attente, retirer le script de la file d'attente dans une boucle infinie, comparer les points temporels et renvoyer les tâches au module d'exécution lorsqu'il arrive. Si le temps n'est pas écoulé, continuez de l'autre côté et entrez dans la file d'attente.
Deux files d'attente. Par exemple, file d'attente à exécuter : TasteList ; file d'attente à exécuter immédiatement : runList.
Divisez la récupération des tâches et l'exécution des tâches en différents processus :
1. Récupération des tâches : le script extrait les tâches de TasteList en boucle, détermine le moment précis et pousse la tâche vers la file d'attente runList lorsque le temps est écoulé. Si c'est inférieur au point, continuez à le pousser dans TasteList ;
2 Exécutez la tâche : parcourez la runList pour la faire apparaître et exécutez-la dès qu'il y a une tâche.
Lorsque le volume est important, vous pouvez simplement ouvrir quelques processus selon vos besoins, et il n'est pas nécessaire de penser à répéter l'exécution.
Utilisez simplement la fonction de tâche planifiée du système pour déclencher un script. Vous pouvez décider de ce que fait le script et comment le faire. Vous pouvez également vous référer à la réponse ci-dessus.
D'une manière générale, un script à haute fréquence suffit (par exemple, une fois par minute ou une fois toutes les 5 minutes). Vous pouvez juger du temps dans le script puis appeler des tâches de différentes fréquences. C'est beaucoup plus facile à gérer que de configurer. tâches planifiées séparément pour chaque script de fréquence.
Ou utilisez la
workerman
swoole
fonction de tâche planifiéeC'est-à-dire que vous enregistrez les données, puis créez un script pour les détecter en continu. . Par exemple, détectez une fois toutes les minutes