ホームページ  >  記事  >  ウェブフロントエンド  >  ノードでメッセージキューを使用する方法を簡単に分析した記事

ノードでメッセージキューを使用する方法を簡単に分析した記事

青灯夜游
青灯夜游転載
2023-01-17 19:48:312259ブラウズ

メッセージキューとは何ですか?次の記事では、メッセージ キューの基本概念を説明し、ノードでメッセージ キューを使用する方法を紹介します。

ノードでメッセージキューを使用する方法を簡単に分析した記事

#1. メッセージ キュー

##メッセージ キューとは

メッセージ キューは、メッセージ送信プロセス中にメッセージを保存するコンテナであり、本質的にはキュー (先入れ先出し)


ノードでメッセージキューを使用する方法を簡単に分析した記事#Message

は、送信する必要があるデータを指します。これは、テキスト、文字列、オブジェクトなどの情報です。

Message Queue

は、2 つのアプリケーション間の通信サービスです。メッセージの

プロデューサ は、メッセージを待たずに、メッセージ キューにデータを格納した後、すぐに戻ることができます。 受信機が応答します。つまり、Producer はデータがキューに挿入されることを保証し、誰がこのメッセージを受け取るかについて心配する必要はありません。メッセージの 受信者 は、メッセージの受信と処理のみに重点を置いています。 [関連チュートリアルの推奨事項: nodejs ビデオ チュートリアル プログラミング教育 ]

ノードでメッセージキューを使用する方法を簡単に分析した記事

メッセージ キューでできること

    分離
  • 上で紹介したように、メッセージ キューはメッセージ プロデューサーとメッセージ レシーバーを分離し、どちらも他方の影響を受けません。 。

  • 非同期
  • 非同期とは、リクエストの応答時間を短縮することです。メッセージのプロデューサーは、単純なロジックを処理し、データをメッセージ キューに入れて返すだけで済みます。 . データベース操作、IO 操作などの複雑なロジックは、

    メッセージの受信者 によって処理されます。

  • ピークシェービング
  • メッセージ キュー アプリケーションは、処理中に、瞬間的に流入するリクエスト情報をメッセージ キューに保存し、すぐに返すことができます。その後、リクエストはメッセージの受信者によってデータに基づいて処理されます。

  • アプリケーション シナリオ
  • ゲーム アクティビティ、フラッシュ セール アクティビティ、注文などのアプリケーションでは、トラフィックが突然増加します。

  • 2. メッセージ キューの概念

メッセージ キューの基本情報を紹介した後、開発する前にメッセージ キューの一部を紹介しましょう。メッセージ キュー。基本概念~

メッセージのプロデューサとコンシューマ

上記のプロデューサ

コンシューマ

# リンク、チャネル、キューを提供します

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是node中使用消息队列的一套工具,可以让我们快速地使用消息队列

地址: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(&#39;amqplib&#39;);
const config = require(&#39;./config&#39;);

const { connectUrl } = config;

(async () => {
  let connection = await amqplib.connect(connectUrl);
  const exchangeName = &#39;testExchange&#39;;
  const key = &#39;testQueue&#39;;
  // 创建两个通道
  const channel1 = await connection.createChannel();
  const channel2 = await connection.createChannel();
  // 指定一个交换机
  await channel1.assertExchange(exchangeName, &#39;fanout&#39;, {
    durable: true,
  });
  // 指定一个队列
  await channel1.assertQueue(key);
  await channel1.bindQueue(key, exchangeName, key);
  channel1.consume(key, (msg) => {
    console.log(&#39;channel 1&#39;, msg.content.toString());
  });

  await channel2.assertExchange(exchangeName, &#39;fanout&#39;, {
    durable: true,
  });
  await channel2.assertQueue(key);
  await channel2.bindQueue(key, exchangeName, key);
  channel2.consume(key, (msg) => {
    console.log(&#39;channel 2&#39;, msg.content.toString());
  });
})();

执行后可以看到,两个通道可以同时工作接收消息

ノードでメッセージキューを使用する方法を簡単に分析した記事

更多node相关知识,请访问:nodejs 教程

以上がノードでメッセージキューを使用する方法を簡単に分析した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。