Maison > interface Web > js tutoriel > Structures de données de file d'attente: comment créer une file d'attente de tâches de nœud

Structures de données de file d'attente: comment créer une file d'attente de tâches de nœud

Christopher Nolan
Libérer: 2025-02-12 08:23:09
original
322 Les gens l'ont consulté

Ce tutoriel explique les structures de données de file d'attente et démontre leur application dans les systèmes de file d'attente, souvent utilisés pour traiter les tâches de longue durée comme la livraison de newsletter par e-mail. Nous allons créer une file d'attente de tâches de nœud simple à l'aide de MongoDB comme courtier de messages.

Queue Data Structures: How to Build a Node Task Queue

Exécuter les tâches immédiatement sur demande n'est pas toujours possible. Imaginez un système de newsletter par e-mail: l'envoi de milliers d'e-mails submergerait instantanément le système. De même, le redimensionnement immédiate des images téléchargées créerait des retards inacceptables. Les tâches de découplage fournissent des réponses utilisateur instantanées tandis que les processus d'arrière-plan gèrent la charge de travail.

Concepts clés:

  • Fixe efficace avec MongoDB: Tirez parti des capacités de MongoDB pour construire des files d'attente de tâches de nœud évolutif.
  • Découplage pour une amélioration de l'expérience utilisateur: Traitement de tâche séparé de l'interaction utilisateur pour les réponses plus rapides.
  • Implémentation de base de la file d'attente de base: Utilisez des tableaux JavaScript (push(), shift()) ou des classes ES6 pour la gestion des files d'attente.
  • plates-formes de file d'attente robustes: Explorez Redis, RabbitMQ, Amazon SQS, etc., pour les applications au niveau de l'entreprise.
  • queue-mongodb Module: Simplifier la gestion des files d'attente dans Node.js en utilisant MongoDB.

Structures de données de file d'attente:

Une file d'attente est une structure de données FIFO (premier entrée en dehors). Des éléments sont ajoutés (enquêtés) à l'arrière et retirés (déquequés) de l'avant.

Fitre JavaScript de base:

Une file d'attente simple peut être implémentée à l'aide d'un tableau JavaScript:

const queue = [];
queue.push('item 1');
queue.push('item 2');
console.log(queue.shift()); // item 1
console.log(queue.shift()); // item 2
Copier après la connexion
Copier après la connexion

Une approche plus structurée utilise une classe ES6:

class Queue {
  constructor() { this.q = []; }
  send(item) { this.q.push(item); }
  receive() { return this.q.shift(); }
}
Copier après la connexion
Copier après la connexion

Ceux-ci conviennent aux tâches moins critiques côté client, mais manquent de persistance et d'accès multi-applications.

plates-formes de file d'attente (redis, lapin, etc.):

Pour les applications de serveur complexes, les courtiers de messages dédiés proposent:

  • Persistance des données
  • Protocoles d'accès multiples
  • plusieurs files d'attente
  • Messagerie retardée
  • Support de type transaction
  • Publier les modèles de surbout

Utilisation de MongoDB comme courtier de messages:

Nous utiliserons le module queue-mongodb pour une file d'attente de tâches de nœud robuste et facilement implémentée.

Configuration du projet de file d'attente des tâches de nœud:

  1. Installez Node.js 14.
  2. Créer un dossier de projet (queue-test).
  3. Créer package.json:
const queue = [];
queue.push('item 1');
queue.push('item 2');
console.log(queue.shift()); // item 1
console.log(queue.shift()); // item 2
Copier après la connexion
Copier après la connexion
  1. Installez les dépendances: npm install
  2. Créer un fichier .env avec les détails de la connexion MongoDB (par exemple, QUEUE_DB_HOST, QUEUE_DB_PORT, etc.).
  3. (Facultatif) Utilisez Docker Compose pour une instance MongoDB.

send.js (ajoutant à la file d'attente):

class Queue {
  constructor() { this.q = []; }
  send(item) { this.q.push(item); }
  receive() { return this.q.shift(); }
}
Copier après la connexion
Copier après la connexion

receive.js (traitement de la file d'attente):

{
  "name": "queue-test",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "send": "node ./send.js",
    "receive": "node ./receive.js"
  },
  "dependencies": {
    "@craigbuckler/queue-mongodb": "^1.0.0", // Adjust version as needed
    "dotenv": "^16.0.3" // Add dotenv for environment variables
  }
}
Copier après la connexion

queue-mongodb Détails du module:

Le module utilise MongoDB pour le stockage. La méthode send() ajoute des documents, et receive() récupère et supprime l'élément le plus ancien. remove(), purge(), et count() Fournir des fonctions de gestion de file d'attente supplémentaires.

Conclusion:

Ce tutoriel démontre un moyen pratique et efficace de mettre en œuvre une file d'attente de tâches dans Node.js à l'aide de MongoDB. Cette approche équilibre la simplicité et l'évolutivité, ce qui le rend adapté à un large éventail d'applications. N'oubliez pas d'adapter le code et la configuration à vos besoins et à votre environnement spécifiques. Le code complet est disponible sur github (le lien serait fourni si le référentiel GitHub réel était disponible).

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal