ホームページ > 記事 > ウェブフロントエンド > メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?
メッセージキューとは何ですか?次の記事では、メッセージ キューの基本概念を説明し、node でメッセージ キューを使用する方法を紹介します。
メッセージ キューとは
メッセージ キューは、メッセージ送信プロセス中にメッセージを保存するコンテナであり、本質的にはキュー (先入れ先出し)
##Message は、送信する必要があるデータを指します。これは、テキスト、文字列、オブジェクトなどの情報です。
Message Queue は、2 つのアプリケーション間の通信サービスです。メッセージの
プロデューサ は、メッセージを待たずに、メッセージ キューにデータを格納した後、すぐに戻ることができます。
受信機が応答します。つまり、
Producer はデータがキューに挿入されることを保証し、誰がこのメッセージを受け取るかについて心配する必要はありません。メッセージの
受信者 は、メッセージの受信と処理のみに重点を置いています。
#メッセージ キューでできること
上で紹介したように、メッセージ キューはメッセージのプロデューサーとメッセージの受信者を分離しており、どちらも他方の影響を受けません。
非同期とは、リクエストの応答時間を短縮することです。メッセージのプロデューサーは、単純なロジックを処理し、データをメッセージ キューに入れて返すだけで済みます。 . データベース操作、IO 操作などの複雑なロジックは、 メッセージの受信者 によって処理されます。
メッセージ キュー アプリケーションは、処理中に、瞬間的に流入するリクエスト情報をメッセージ キューに保存し、すぐに返すことができます。その後、リクエストはメッセージの受信者によってデータに基づいて処理されます。
ゲーム アクティビティ、フラッシュ セール アクティビティ、注文などのアプリケーションでは、トラフィックが突然増加します。
メッセージのプロデューサとコンシューマ
上記のプロデューサ と コンシューマ
# リンク、チャネル、キューを提供します
。
キュー (キュー): メッセージ キューにデータを保存するキュー。メッセージ キュー サービスは複数のキューを持つことができます。
#要約すると、リンクとチャネル キューの関係は次のようになります。
Exchange )
メッセージ キューメッセージを送信するときは、
スイッチが必要です。指定しない場合は、デフォルトのスイッチが使用されます。スイッチの役割は、メッセージを対応するキューにプッシュすることです。メッセージキューには全部で4種類のスイッチがありますDirect: キューモードを指定 メッセージが来ると指定したQueueのみに送信し、それ以外のQueueには送信します受け取りません。
#3.node は RabbitMQ を使用します
#RabbitMQ のインストールは、公式 Web サイトからダウンロードしてインストールできます。PortalMAC では、brew コマンドを直接使用して、
brew install rabbitmqをインストールできます。
##node プロジェクトのインストール amqplib
amqplib です。ノードでメッセージ キューを使用するためのツールのセットです。これにより、メッセージ キューをすばやく使用できるようになります。
地址:https://www.npmjs.com/package/amqplib
创建生产者
/** product.js 消费者 */ const amqplib = require('amqplib'); const config = require('./config'); const { connectUrl } = config; (async () => { const connection = await amqplib.connect(connectUrl); const channel = await connection.createChannel(); const exchangeName = 'testExchange'; const key = 'testQueue'; const sendMsg = 'hello rabbitmq'; // 知道交换机类型 await channel.assertExchange(exchangeName, 'fanout', { durable: true, }); // 指定一个队列 await channel.assertQueue(key); for (let i = 0; i < 100; i++) { channel.publish(exchangeName, key, Buffer.from(`${sendMsg} ${i}`)); } await channel.close(); await connection.close(); })();
运行后在后台可以看到新增了一个有100条消息的队列
创建消费者
/** customer.js 消费者 */ const amqplib = require('amqplib'); const config = require('./config'); const { connectUrl } = config; (async () => { let connection = await amqplib.connect(connectUrl); const exchangeName = 'testExchange'; const key = 'testQueue'; // 创建两个通道 const channel1 = await connection.createChannel(); const channel2 = await connection.createChannel(); // 指定一个交换机 await channel1.assertExchange(exchangeName, 'fanout', { durable: true, }); // 指定一个队列 await channel1.assertQueue(key); await channel1.bindQueue(key, exchangeName, key); channel1.consume(key, (msg) => { console.log('channel 1', msg.content.toString()); }); await channel2.assertExchange(exchangeName, 'fanout', { durable: true, }); await channel2.assertQueue(key); await channel2.bindQueue(key, exchangeName, key); channel2.consume(key, (msg) => { console.log('channel 2', msg.content.toString()); }); })();
执行后可以看到,两个通道可以同时工作接收消息
更多node相关知识,请访问:nodejs 教程!
以上がメッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。