Cet article présente principalement le code d'implémentation simple de la file d'attente de messages Java. L'éditeur pense que c'est assez bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur pour y jeter un œil
Aujourd'hui, j'ai vu que nos informations de recrutement avaient des exigences en matière de files d'attente de messages, puis j'y ai réfléchi et j'ai beaucoup cherché en ligne.
Je peux d'abord donner un petit exemple pour illustrer le scénario d'application
Supposons que votre serveur ait une capacité de traitement de 200 par minute Mais lorsque le client atteint à nouveau son pic, il peut vous envoyer 1 000 messages par minute. À ce moment-là, vous pouvez le placer dans une file d'attente, puis le traiter de manière normale et ordonnée, premier entré, dernier sorti (LIFO). entré, premier sorti (FIFO) Vous pouvez prendre une décision en fonction de votre propre situation
pile premier entré dernier sorti (LIFO)-------------Classe correspondante de Java Stack
file d'attente premier entré, premier sorti (LIFO) FIFO)--------java classe correspondante Queue
Ces deux peuvent être encapsulés et implémentés par Linkedlist. exemple d'une pile que j'ai écrite moi-même
/** * @author 刘伊凡 * --------->>>>>>队列的实现-------------- */ public class MyStack<T> { private LinkedList<T> storage = new LinkedList<T>(); public synchronized void push(T e) {//需要加上同步 storage.addFirst(e); } public T peek() { return storage.getFirst(); } public void pop() { storage.removeFirst(); } public boolean empty() { return storage.isEmpty(); } @Override public String toString() { return storage.toString(); } }
Ce qui suit est une classe de test
/** * @author 刘伊凡 * */ public class StackTest { public static void main(String[] args) { MyStack<String> stack = new MyStack<String>(); for(String s : "the prefect code".split(" ")){//LIFO stack.push(s); } while(!stack.empty()){ System.out.print(stack.peek()+" "); stack.pop(); } System.out.println(); for(char s : "写了个一句话倒起来说的程序".toCharArray()){//用例:正话反说 stack.push(String.valueOf(s)); } while(!stack.empty()){ System.out.print(stack.peek()); stack.pop(); } } }
C'est assez intéressant, cela me rappelle la soirée à l'école d'avant. Sur Internet, lorsque l'animateur interagit, les gens montent sur scène pour répondre aux questions et gagner des prix. L'une des questions est que l'animateur prononce une phrase, puis la demande. les candidats se lèvent et disent, notre programme répond aux besoins, haha, nous pouvons utiliser Java pour le faire Tricher, appliquer ce que vous avez appris
Scénarios d'application de la file d'attente de messages, supplémentaires (à partir d'Internet)
Personnellement, je pense que la principale caractéristique de la file d'attente des messages est le traitement asynchrone, et son objectif principal est de réduire le temps de réponse aux requêtes et de découpler. Par conséquent, le principal scénario d'utilisation consiste à placer les opérations qui prennent du temps et ne nécessitent pas de résultats de retour immédiats (synchrones) sous forme de messages dans la file d'attente des messages. Dans le même temps, grâce à l'utilisation de files d'attente de messages, tant que le format du message reste inchangé, l'expéditeur et le destinataire du message n'ont pas besoin de se contacter ou d'être affectés l'un par l'autre, c'est-à-dire de découplage et de résumé.
Scénarios d'utilisation, par exemple :
Supposons que l'utilisateur s'enregistre dans votre logiciel, et une fois que le serveur aura reçu la demande d'enregistrement de l'utilisateur, il effectuera les opérations suivantes :
Vérifiez le nom d'utilisateur et d'autres informations. S'il n'y a pas de problème, un enregistrement d'utilisateur sera ajouté à la base de données
Si vous vous inscrivez par e-mail, vous recevrez un e-mail. indiquant que l'enregistrement est réussi. L'enregistrement par téléphone portable enverra un message texte
pour analyser les informations personnelles de l'utilisateur afin de lui recommander des personnes partageant les mêmes idées à l'avenir, ou de le recommander à celles-ci. personnes
à envoyer à l'utilisateur Une notification système contenant le guide d'utilisation
et ainsi de suite...
Mais pour le Utilisateur, la fonction d'enregistrement ne nécessite en fait que la première étape, tant que le serveur envoie son. Une fois les informations de compte enregistrées dans la base de données, il peut se connecter et faire ce qu'il veut. Quant aux autres éléments, doivent-ils être complétés dans cette demande ? Cela vaut-il la peine pour l'utilisateur d'attendre que vous traitiez de quelque chose qui ne lui importe pas ? Ainsi, une fois la première étape terminée, le serveur peut placer d'autres opérations dans la file d'attente de messages correspondante et renvoyer immédiatement les résultats de l'utilisateur, et la file d'attente de messages effectuera ces opérations de manière asynchrone.
Ou il existe une autre situation où un grand nombre d'utilisateurs s'inscrivent à votre logiciel en même temps. Dans des conditions de concurrence élevée, les demandes d'enregistrement commencent à avoir des problèmes, comme l'interface de messagerie ne peut pas le supporter, ou la grande quantité de calculs lors de l'analyse des informations épuise le processeur. Une fois complètement chargé, il y aura une situation où, même si les enregistrements de données utilisateur sont rapidement ajoutés à la base de données, ils restent bloqués lors de l'envoi d'e-mails ou de l'analyse des informations, ce qui entraîne un temps de réponse du système. demande d'augmentation significative, voire d'expiration, ce qui n'est pas rentable. Face à cette situation, ces opérations sont généralement placées dans la file d'attente des messages (modèle producteur-consommateur). La file d'attente des messages les traite lentement, et en même temps, la demande d'enregistrement peut être complétée rapidement sans affecter l'utilisation des autres fonctions par l'utilisateur.
Ainsi, dans le développement normal des fonctions du logiciel, il n'est pas nécessaire de rechercher délibérément des scénarios d'utilisation des files d'attente de messages. Au lieu de cela, lorsqu'un goulot d'étranglement des performances se produit, vérifiez s'il existe des opérations fastidieuses dans la logique métier. qui peut être traité de manière asynchrone. S'il existe, une file d'attente de messages peut être introduite pour le résoudre. Dans le cas contraire, l'utilisation aveugle des files d'attente de messages peut augmenter les coûts de maintenance et de développement, mais ne pas permettre d'améliorer considérablement les performances, ce qui n'en vaut pas la peine.
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!