Was ist eine Nachrichtenwarteschlange?
Eine Nachrichtenwarteschlange ist ein Container, der Nachrichten während des Nachrichtenübertragungsprozesses speichert. Es handelt sich im Wesentlichen um eine Warteschlange (First In, First Out).
消息
bezieht sich auf die Daten, die übertragen werden müssen. Dabei kann es sich um Text, Zeichenfolgen, Objekte und andere Informationen handeln.
消息队列
ist ein Kommunikationsdienst zwischen zwei Anwendungen.产生者
der Nachricht kann diese sofort nach dem Speichern der Daten in der Nachrichtenwarteschlange zurückgeben, ohne auf die Antwort接收者
der Nachricht warten zu müssen. Das heißt:生产者
stellt sicher, dass die Daten in die Warteschlange eingefügt werden, und es spielt keine Rolle, wer die Nachricht erhält.接收者
der Nachricht konzentriert sich nur auf den Empfang und die Verarbeitung der Nachricht.
Welche
Entkopplung kann die Nachrichtenwarteschlange bewirken? Wie oben beschrieben trennt die Nachrichtenwarteschlange den Nachrichtenerzeuger und den Nachrichtenempfänger, und keiner wird vom anderen beeinflusst.
Asynchronous dient dazu, die Antwortzeit von Anforderungen zu verkürzen. Der Ersteller der Nachricht muss nur einfache Logik verarbeiten und die Daten in die Nachrichtenwarteschlange stellen, um sie zurückzugeben. Komplexe Logik, wie z. B. Datenbankoperationen und E/A-Operationen, werden vom Empfänger verarbeitet die Nachricht.
Peak Shaving Wenn die Nachrichtenwarteschlangenanwendung bedient wird, kann sie den sofortigen Zustrom von Anforderungsinformationen in die Nachrichtenwarteschlange speichern und diese sofort zurückgeben. Die Anfrage wird dann auf Basis der Daten durch den Empfänger der Nachricht bearbeitet.
Anwendungsszenarien: Gaming-Aktivitäten, Flash-Sale-Aktivitäten, Auftragserteilung usw., die zu einem sofortigen Anstieg des Datenverkehrs führen.
, bevor wir die Nachrichtenwarteschlange entwickeln, stellen wir einige grundlegende Konzepte der Nachrichtenwarteschlange vor:
Nachrichtenproduzent (Produzent) und Verbraucher (Kunde),
生产者
消费者
erwähnt wurden Bereitstellung
von Links, Kanälen und Warteschlangen.
Verbindung: Stellt eine Verbindung zwischen dem Dienstprogramm und der Nachrichtenwarteschlange dar. Ein Dienstprogramm kann mehrere Links erstellen .
Kanal: Ein Kanal zwischen Nachrichtenwarteschlangen-Links. Ein Link kann mehrere Kanäle haben .
Warteschlange: Eine Warteschlange, die Daten in einer Nachrichtenwarteschlange speichert. Ein Nachrichtenwarteschlangendienst kann mehrere Warteschlangen haben.
Zusammenfassend lässt sich sagen, dass die Beziehung zwischen Links und Kanalwarteschlangen wie folgt aussieht
Die NachrichtenwarteschlangeExchange (Exchange)
muss beim Senden von Nachrichten über einen Exchange verfügen. Wenn nicht angegeben, wird der Standardaustausch verwendet. Die Rolle des Switches besteht darin, Nachrichten in die entsprechende Warteschlange zu verschieben. Es gibt insgesamt 4 Arten von Schaltern in der Nachrichtenwarteschlange
: Direkt: Geben Sie den Warteschlangenmodus an. Wenn eine Nachricht eingeht, wird sie nur an die angegebene Warteschlange gesendet und andere Warteschlangen empfangen sie nicht.
Fanout: Broadcast-Modus. Wenn eine Nachricht eingeht, wird sie an alle Warteschlangen gesendet.
Thema: Fuzzy-Matching-Modus, entsprechende Weiterleitung durch Fuzzy-Matching.
Header: Ähnlich dem Direktmodus.
brew installiere Rabbitmq
Besuchen Sie dann lokal http://localhost:15672/, um den Hintergrund des Rabbitmq-Dienstes zu sehen. Das anfängliche Passwort für das Konto lautet guest
amqplib ist eine Reihe von Tools zur Verwendung von Nachrichtenwarteschlangen im Knoten, mit denen wir Nachrichtenwarteschlangen schnell verwenden können.
Produzenten erstellenAdresse: https://www.npmjs.com/package/amqplib
/** product.js Verbraucher*/ const amqplib = require('amqplib'); const config = require('./config'); const { connectUrl } = config; (async () => { const Connection = Warten amqplib.connect(connectUrl); const Kanal = Warten auf Verbindung.createChannel(); const ExchangeName = 'testExchange'; const key = 'testQueue'; const sendMsg = 'Hallo Rabbitmq'; // Kennen Sie den Schaltertypwaitchannel.assertExchange(exchangeName, 'fanout', { langlebig: wahr, }); //Geben Sie eine Warteschlange an.waitchannel.assertQueue(key); for (sei i = 0; i < 100; i++) { channel.publish(exchangeName, key, Buffer.from(`${sendMsg} ${i}`)); } warte auf Channel.close(); Warten Sie auf die Verbindung.close(); })();
Nach dem Ausführen sehen Sie im Hintergrund, dass eine neue Warteschlange mit 100 Nachrichten hinzugefügt wurde.
Verbraucher erstellen/** customer.js Consumer*/ const amqplib = require('amqplib'); const config = require('./config'); const { connectUrl } = config; (async () => { let Connection = Warten amqplib.connect(connectUrl); const ExchangeName = 'testExchange'; const key = 'testQueue'; //Erstelle zwei Kanäle constchannel1 =waiteconnection.createChannel(); const Channel2 = Warten auf Connection.createChannel(); //Geben Sie einen Austausch an. Warten Sie auf channel1.assertExchange(exchangeName, 'fanout', { langlebig: wahr, }); //Geben Sie eine Warteschlange an.waitchannel1.assertQueue(key); Warten Sie auf Kanal1.bindQueue(Schlüssel, ExchangeName, Schlüssel); channel1.consume(key, (msg) => { console.log('channel 1', msg.content.toString()); }); Warten Sie auf channel2.assertExchange(exchangeName, 'fanout', { langlebig: wahr, }); Warten Sie auf channel2.assertQueue(key); Warten Sie aufchannel2.bindQueue(key,exchangeName,key); channel2.consume(key, (msg) => { console.log('channel 2', msg.content.toString()); }); })();
Nach der Ausführung können Sie sehen, dass beide Kanäle gleichzeitig Nachrichten empfangen können.