メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?
メッセージキューとは何ですか?次の記事では、メッセージ キューの基本概念を説明し、node でメッセージ キューを使用する方法を紹介します。
1. メッセージ キュー
メッセージ キューとは
メッセージ キューは、メッセージ送信プロセス中にメッセージを保存するコンテナであり、本質的にはキュー (先入れ先出し)
##Message は、送信する必要があるデータを指します。これは、テキスト、文字列、オブジェクトなどの情報です。
Message Queue は、2 つのアプリケーション間の通信サービスです。メッセージの
プロデューサ は、メッセージを待たずに、メッセージ キューにデータを格納した後、すぐに戻ることができます。
受信機が応答します。つまり、
Producer はデータがキューに挿入されることを保証し、誰がこのメッセージを受け取るかについて心配する必要はありません。メッセージの
受信者 は、メッセージの受信と処理のみに重点を置いています。
#メッセージ キューでできること
- 分離
上で紹介したように、メッセージ キューはメッセージのプロデューサーとメッセージの受信者を分離しており、どちらも他方の影響を受けません。
- 非同期
非同期とは、リクエストの応答時間を短縮することです。メッセージのプロデューサーは、単純なロジックを処理し、データをメッセージ キューに入れて返すだけで済みます。 . データベース操作、IO 操作などの複雑なロジックは、 メッセージの受信者 によって処理されます。
- ピークシェービング
メッセージ キュー アプリケーションは、処理中に、瞬間的に流入するリクエスト情報をメッセージ キューに保存し、すぐに返すことができます。その後、リクエストはメッセージの受信者によってデータに基づいて処理されます。
- アプリケーション シナリオ
ゲーム アクティビティ、フラッシュ セール アクティビティ、注文などのアプリケーションでは、トラフィックが突然増加します。
メッセージ キューの基本情報を紹介した後、開発する前にメッセージ キューの一部を紹介しましょう。メッセージ キュー。基本概念~
メッセージのプロデューサとコンシューマ
上記のプロデューサ と コンシューマ
# リンク、チャネル、キューを提供します
- Link (接続): サービス プログラム間のリンクを表します。そしてメッセージキュー。
- サービス プログラムは複数のリンクを作成できます
。
チャネル: メッセージ キュー リンク間のチャネル。 - 1 つのリンクに複数のチャネルを含めることができます。
キュー (キュー): メッセージ キューにデータを保存するキュー。メッセージ キュー サービスは複数のキューを持つことができます。
#要約すると、リンクとチャネル キューの関係は次のようになります。
Exchange )
メッセージ キューメッセージを送信するときは、
スイッチが必要です。指定しない場合は、デフォルトのスイッチが使用されます。スイッチの役割は、メッセージを対応するキューにプッシュすることです。メッセージキューには全部で4種類のスイッチがありますDirect: キューモードを指定 メッセージが来ると指定したQueueのみに送信し、それ以外のQueueには送信します受け取りません。
- fanout: ブロードキャスト モード。メッセージが到着すると、すべてのキューに送信されます。
- トピック: ファジー マッチング モード、ファジー マッチングによる対応する転送。
- header: ダイレクト モードに似ています。
#3.node は RabbitMQ を使用します
##rabbitMQ をインストールします
#RabbitMQ のインストールは、公式 Web サイトからダウンロードしてインストールできます。PortalMAC では、brew コマンドを直接使用して、
brew install rabbitmq
- インストールが完了したら、rabbitmq サービスを開始します。 complete
- 次に、ローカルで http://localhost:15672/ にアクセスして、rabbitmq サービスの背景を確認します。初期アカウントとパスワードは
- guest
##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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。
