ホームページ  >  記事  >  ウェブフロントエンド  >  メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?

メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?

青灯夜游
青灯夜游転載
2022-06-02 10:05:433770ブラウズ

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

メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?

1. メッセージ キュー

メッセージ キューとは

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

メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?

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

Message Queue は、2 つのアプリケーション間の通信サービスです。メッセージの プロデューサ は、メッセージを待たずに、メッセージ キューにデータを格納した後、すぐに戻ることができます。 受信機が応答します。つまり、Producer はデータがキューに挿入されることを保証し、誰がこのメッセージを受け取るかについて心配する必要はありません。メッセージの 受信者 は、メッセージの受信と処理のみに重点を置いています。

メッセージキューとは何ですか?ノードでメッセージキューを使用するにはどうすればよいですか?

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

  • 分離

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

  • 非同期

    非同期とは、リクエストの応答時間を短縮することです。メッセージのプロデューサーは、単純なロジックを処理し、データをメッセージ キューに入れて返すだけで済みます。 . データベース操作、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 です。ノードでメッセージ キューを使用するためのツールのセットです。これにより、メッセージ キューをすばやく使用できるようになります。

地址: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 までご連絡ください。