Maison Java javaDidacticiel Exemple de partage de code de file d'attente de messages en Java

Exemple de partage de code de file d'attente de messages en Java

Jul 24, 2017 pm 03:37 PM
java 代码 示例

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(); 
  } 
 
}
Copier après la connexion

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(); 
    } 
  } 
}
Copier après la connexion

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!

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)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles