
Qu'est-ce qu'une file d'attente de messages ?
Une file d'attente de messages est un conteneur qui enregistre les messages pendant le processus de transmission des messages. Il s'agit essentiellement d'une file d'attente (premier entré, premier sorti).

消息fait référence aux données qui doivent être transmises, qui peuvent être du texte, une chaîne ou un objet et d'autres informations.
消息队列est un service de communication entre deux applications.产生者du message peut le renvoyer immédiatement après avoir stocké les données dans la file d'attente de messages, sans attendre接收者du message. Autrement dit :生产者veille à ce que les données soient insérées dans la file d'attente, et peu importe qui reçoit le message.接收者du message se concentre uniquement sur la réception du message et son traitement.

Quel
découplage la file d'attente de messages peut-elle effectuer ? Comme indiqué ci-dessus, la file d'attente de messages sépare le producteur du message et le destinataire du message, et aucun n'est affecté par l'autre.
Asynchrone L'asynchrone consiste à réduire le temps de réponse des requêtes. Le producteur du message n'a besoin que de traiter une logique simple et de placer les données dans la file d'attente des messages pour les renvoyer. La logique complexe, telle que les opérations de base de données et les opérations d'E/S, est gérée par le destinataire. le message.
Peak Shaving Lorsque l'application de file d'attente de messages est en service, elle peut enregistrer l'afflux instantané d'informations de demande dans la file d'attente de messages et le renvoyer immédiatement. La demande est ensuite traitée en fonction des données par le destinataire du message.
Scénarios d'application : activités de jeu, activités de vente flash, passation de commandes, etc. qui provoqueront une augmentation instantanée du trafic.
avoir introduit les informations de base sur la file d'attente de messages, avant de développer la file d'attente de messages, introduisons quelques concepts de base de file d'attente de messages ~
producteur de messages (producteur) et consommateur (client)
消费者生产者et consommateurs mentionnés ci-dessus
fournir
des liens, des canaux et des files d'attente.
Connexion : représente un lien entre le programme de service et la file d'attente des messages. Un programme de service peut créer plusieurs liens .
Canal : un canal entre les liens de file d'attente de messages. Un lien peut avoir plusieurs canaux .
File d'attente : file d'attente qui stocke les données dans une file d'attente de messages. Un service de file d'attente de messages peut avoir plusieurs files d'attente.
Pour résumer, la relation entre les liens et les files d'attente de canaux est la suivante

Exchange (échange)
doit avoir un échange lors de l'envoi des messages . S'il n'est pas spécifié, l'échange par défaut sera utilisé. Le rôle du commutateur est de pousser les messages vers la file d'attente correspondante. Il existe au total 4 types de commutateurs dans la file d'attente des messages
: Direct : Spécifiez le mode de file d'attente Lorsqu'un message arrive, il sera uniquement envoyé à la file d'attente spécifiée et les autres files d'attente ne le recevront pas.
fanout : mode diffusion, lorsqu'un message arrive, il sera envoyé à toutes les files d'attente.
Sujet : mode de correspondance floue, transfert correspondant via la correspondance floue.
en-tête : similaire au mode Direct.
Brew installer RabbitMQ

Visitez ensuite http://localhost:15672/ localement pour voir l'arrière-plan du service RabbitMQ. Le mot de passe initial du compte est guest

amqplib est un ensemble d'outils pour utiliser les files d'attente de messages dans le nœud, ce qui nous permet d'utiliser rapidement les files d'attente de messages.
Créer un producteurAdresse : https://www.npmjs.com/package/amqplib
/** consommateur product.js*/
const amqplib = require('amqplib');
const config = require('./config');
const { connectUrl } = config;
(asynchrone () => {
const connection = attendre amqplib.connect(connectUrl);
const canal = attendre la connexion.createChannel();
const ExchangeName = 'testExchange';
clé const = 'testQueue';
const sendMsg = 'bonjour lapinmq';
// Connaître le type de commutateur wait channel.assertExchange(exchangeName, 'fanout', {
durable : vrai,
});
//Spécifiez une file d'attente en attente canal.assertQueue(key);
pour (soit i = 0; i < 100; i++) {
canal.publish(exchangeName, key, Buffer.from(`${sendMsg} ${i}`));
}
attendre canal.close();
attendre la connexion.close();
})();Après l'exécution, vous pouvez voir en arrière-plan qu'une nouvelle file d'attente de 100 messages a été ajoutée.

/** consommateur customer.js*/
const amqplib = require('amqplib');
const config = require('./config');
const { connectUrl } = config;
(asynchrone () => {
let connection = wait amqplib.connect(connectUrl);
const ExchangeName = 'testExchange';
clé const = 'testQueue';
//Créer deux canaux const channel1 = wait connection.createChannel();
const canal2 = attendre la connexion.createChannel();
//Spécifiez un échange en attente de canal1.assertExchange(exchangeName, 'fanout', {
durable : vrai,
});
//Spécifiez une file d'attente wait channel1.assertQueue(key);
attendre canal1.bindQueue (clé, nom d'échange, clé);
canal1.consume(clé, (msg) => {
console.log('canal 1', msg.content.toString());
});
attendre canal2.assertExchange(exchangeName, 'fanout', {
durable : vrai,
});
attendre canal2.assertQueue(clé);
attendre canal2.bindQueue (clé, nom d'échange, clé);
canal2.consume(clé, (msg) => {
console.log('canal 2', msg.content.toString());
});
})();Après exécution, vous pouvez voir que les deux canaux peuvent fonctionner en même temps pour recevoir des messages.
