RabbitMQ: 信頼性の高いメッセージングのための強力なメッセージング ミドルウェア

 メッセージング ミドルウェアは、最新の分散システムで重要な役割を果たしており、非同期通信と分離のための信頼性が高く効率的な方法を提供します。このブログでは、広く使用されているオープンソースのメッセージング ミドルウェアである RabbitMQ に焦点を当てます。RabbitMQ の機能、仕組み、およびアプリケーションで信頼性の高いメッセージングを実現するために RabbitMQ を使用する方法について詳しく説明します。

1. RabbitMQ の概要

RabbitMQ は、AMQP (Advanced Message Queuing Protocol) に基づくオープン ソースのメッセージング ミドルウェアです。さまざまな業界で広く使用されている、信頼性が高く、柔軟で、拡張可能なメッセージング メカニズムを提供します。RabbitMQ の中心的な考え方は、プロデューサーがメッセージをスイッチに送信し、スイッチがルーティング ルールに従ってメッセージをキューに渡し、その後コンシューマーがキューからメッセージを取得して処理するというものです。

2. 関連概念

RabbitMQ は、Erlang で書かれたオープン ソースのメッセージ ミドルウェアで、Advanced Message Queuing Protocol (AMQP) を実装しています。RabbitMQ は、信頼性が高く、柔軟でスケーラブルなメッセージング システムとして、アプリケーション間でデータを転送するための信頼できるメカニズムを提供します。

以下は、RabbitMQ のいくつかの主要な機能と概念の詳細な説明です。

  1. メッセージ キュー: RabbitMQ は、メッセージ キューを使用してメッセージを保存および配信します。メッセージ キューは、コンシューマーがメッセージを受信して​​処理する準備ができるまで、メッセージを一時的に保存する先入れ先出し (FIFO) データ構造です。

  2. プロデューサーとコンシューマー: メッセージの送信者はプロデューサーと呼ばれ、メッセージの受信者はコンシューマーと呼ばれます。プロデューサはキューにメッセージを送信し、コンシューマはキューからメッセージを取得して処理します。

  3. キュー: キューは RabbitMQ のコア部分であり、メッセージの保存と配信のキャリアです。プロデューサはキューにメッセージを送信し、コンシューマはキューからメッセージを取得します。キューは永続化できるため、RabbitMQ サーバーがダウンしてもメッセージは失われません。

  4. Exchange (Exchange): Exchange はメッセージのルーターであり、メッセージをプロデューサーからキューに送信します。特定のルールに従ってメッセージを 1 つ以上のキューにルーティングします。RabbitMQ は、ダイレクト スイッチ、トピック スイッチ、ブロードキャスト スイッチなど、さまざまなタイプのスイッチを提供します。

  5. バインディング: バインディングは、エクスチェンジとキューを関連付けて、エクスチェンジとキュー間のメッセージのルーティング ルールを定義します。バインディングは、メッセージを交換局からキューにルーティングする方法を指定します。

  6. ルーティング キー: ルーティング キーは、プロデューサーがメッセージを送信するときにメッセージとともに指定する属性です。交換機はルーティング キーを使用して、メッセージをルーティングするキューを決定します。

  7. 永続性: キューまたはメッセージが永続的としてマークされている場合、RabbitMQ の再起動後のデータ損失を防ぐために、キューまたはメッセージはディスクに永続化されます。

  8. パブリッシュ/サブスクライブ モード: RabbitMQ はパブリッシュ/サブスクライブ モードをサポートします。このモードでは、プロデューサがスイッチにメッセージを送信し、スイッチがそれにバインドされているすべてのキューにメッセージをブロードキャストし、各キューのコンシューマがメッセージを受信して​​処理できます。

  9. ACK メカニズム: コンシューマは ACK メカニズムを使用して、メッセージが正常に受信され処理されたことを RabbitMQ に通知できます。RabbitMQ は、コンシューマーが明示的にメッセージを確認した後にのみ、キューからメッセージを削除します。

  10. メッセージの確認応答と永続性: RabbitMQ を使用すると、プロデューサーはメッセージの送信時に確認応答を要求できます。メッセージをキューに正常にルーティングできない場合、またはルーティング中にエラーが発生した場合、RabbitMQ はプロデューサーに通知します。さらに、メッセージとキューの永続性により、RabbitMQ の再起動後でもデータが失われることはありません。

つまり、RabbitMQ は信頼性が高く柔軟なメッセージ ミドルウェアであり、メッセージ キューをコアとして使用し、スイッチ、キュー、バインディングなどの概念を使用してメッセージをルーティングおよび配信します。信頼性の高いメッセージング メカニズムと豊富な機能を提供し、分散システム、マイクロサービス アーキテクチャ、タスク キュー、およびその他のシナリオで広く使用され、アプリケーションによるデカップリング、非同期通信、信頼性保証の実現を支援します。

3. RabbitMQ の仕組み

RabbitMQ の動作原理は、次の手順のように簡単に要約できます。

1. プロデューサはメッセージを交換機に送信します。

プロデューサーは RabbitMQ に接続し、事前定義された交換にメッセージを送信します。メッセージには、JSON、XML などの構造化データを含めることができます。

String message = "Hello, RabbitMQ!";
channel.basicPublish(exchangeName, routingKey, null, message.getBytes());

2. スイッチはメッセージをキューにルーティングします。

交換機は、事前定義されたルーティング ルールに従って、交換機にバインドされた 1 つ以上のキューにメッセージをルーティングします。ルーティング ルールは、完全一致、パターン一致などに基づくことができます。

channel.queueBind(queueName, exchangeName, routingKey);

3. コンシューマはキューからメッセージを取得します。

コンシューマは RabbitMQ に接続し、対象のキューをサブスクライブします。メッセージがキューに到着すると、RabbitMQ はすぐにメッセージをサブスクライブされたコンシューマーにプッシュして処理します。

channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        System.out.println("Received message: " + message);
    }
});

4. コンシューマはメッセージを処理し、確認を送信します。

コンシューマーはメッセージを取得した後、対応するビジネス ロジック処理を実行できます。メッセージが正常に処理されると、コンシューマはメッセージが消費されたことを示す確認応答を RabbitMQ に送信し、RabbitMQ はメッセージを安全に削除できます。

プロデューサは、「my_exchange」という名前の交換にメッセージを送信し、ルーティング キー「my_routing_key」を使用して「my_queue」という名前のキューにメッセージをルーティングします。コンシューマは「my_queue」キューをサブスクライブし、メッセージを受信するとコールバック関数を呼び出してメッセージを処理します。

4. RabbitMQの特徴

RabbitMQ は、広く使用されるメッセージング ミドルウェアとなる多くの強力な機能を提供します。

  • 永続性: RabbitMQ はメッセージとキューをディスクに永続化でき、サーバーが再起動した後でもメッセージは失われません。
  • 柔軟なルーティング ルール: さまざまなスイッチ タイプとルーティング キーを使用することで、正確なメッセージ ルーティング戦略を実現できます。
  • 信頼性と回復可能性: RabbitMQ は、メッセージの確認応答、トランザクション、発行者の確認など、メッセージの信頼性の高い配信を保証するためのさまざまなメカニズムを提供します。
  • スケーラビリティ: RabbitMQ は分散デプロイメントとクラスター モードをサポートしており、高スループットと高可用性を実現できます。
  • 多言語クライアント: RabbitMQ は、開発者がさまざまな言語環境で使用できるように、Java、Python、Ruby など、公式にサポートされているさまざまなクライアント ライブラリを提供します。

5. 実際のアプリケーションにおける RabbitMQ の適用シナリオ

参考記事:

【RabbitMQ】RabbitMQとは何ですか?RabbitMQ は何に役立ちますか? 応用シナリオは何ですか? _Luyao Yezi のブログ - CSDN ブログ

RabbitMQ には、次のようなさまざまなシナリオで幅広い用途がありますが、これらに限定されません。

  • 非同期タスク処理: 時間のかかるタスクを RabbitMQ に送信し、コンシューマによって非同期に実行することで、システムの応答パフォーマンスとスケーラビリティを向上させます。
  • イベント駆動型アーキテクチャ: RabbitMQ を使用してイベントのパブリッシュとサブスクリプションを実装すると、対象のイベントをサブスクライブすることでさまざまなコンポーネントを分離できます。
  • アプリケーションの分離とフロー制御: メッセージ ミドルウェアを導入することで、異なるアプリケーションを分離でき、フロー制御やサービス低下などのメカニズムを実装できます。
  • ログの収集と分析: RabbitMQ を使用して、分散システム内のログ メッセージを中央ログ サーバーに送信し、集中管理と分析を行います。

 5.1 サービス間の分離

ユーザーの注文、在庫処理。【サービス間の分離】

MQ を使用する前に:

システムが正常な場合、ユーザーが注文すると、注文システムは在庫システムを呼び出して削除操作を実行し、操作が成功すると、注文が正常に完了したことを通知するメッセージを返します。システムに異常が発生すると、在庫システムにアクセスできなくなり、注文の削除操作が実行できなくなり、最終的に注文ができなくなることがあります。

MQ を使用した後:

注文システムと在庫システムは相互に対話しなくなり、独立して実行されるため、アプリケーションの分離という目的が達成されます。注文システムは注文メッセージを MQ に書き込むだけで、次のステップを直接実行できます。このとき、在庫システムが異常であっても、注文システムの動作には影響せず、在庫システムが正常に戻るまで注文の在庫削除記録はMQに永続的に保存され、注文がサブスクライブされます。成功するまで消費される MQ からのメッセージ。

MQ を使用する前に:


MQ を使用した後:

5.2 非同期通信の実現

ユーザー登録、携帯電話のテキストメッセージ、電子メールの送信【非同期通信を実現】

MQ を使用する前に:

操作プロセス全体はすべてメインスレッド内で完了します。「ユーザー登録」-「ストレージにユーザーを追加」-「電子メールを送信」-「SMS を送信」をクリックします。各ステップは、実行する前に、前のステップが完了するまで待つ必要があります。また、各操作ステップの応答時間は一定ではなく、リクエストが多すぎるとメインスレッドへのリクエストに時間がかかり、応答が遅くなったり、クラッシュを引き起こしたりするなど、ユーザーエクスペリエンスに重大な影響を及ぼします。

MQ を使用した後:

メイン スレッドは、時間のかからないウェアハウジング操作を処理するだけで済み、その後、処理対象のメッセージを MQ メッセージ キューに書き込み、その後、さまざまな独立したメール システムや SMS システムで使用できるようにメッセージ キュー内のメッセージをサブスクライブします。同じ時間です。このように、メッセージ キューはメッセージの保存と配信の仲介として使用されます。これには時間がかかり、消費するリソースがほとんどないだけでなく、単一のサーバーでより多くの同時リクエストを処理できます。


 

5.3 フローピーククリッピング

商品のフラッシュセールとスナップアップ。【フローピーククリッピング】

トラフィックのピークカットはメッセージ キューの一般的なシナリオであり、通常はフラッシュ セールやグループ購入活動で使用されます。

MQ を使用する前に:フラッシュセールやパニック買いのアクティビティでは、ユーザーのアクセスによって発生するトラフィックが非常に大きくなり、同じ時間内に数千万のリクエストが発生することもあります。この瞬間的なトラフィックの急増には、アプリケーションのシステム構成が耐えられません。 、システムが直接クラッシュする原因となります。

例: システム A は通常、1 秒あたり 100 のリクエストを要求し、システムは安定して動作します。しかし、午後 8 時にアクティビティが急増し、リクエストの数が 1 秒あたり 10,000 に増加し、システムは最大で 10,000 のリクエストを処理できます。 1 秒あたり 1,000 リクエストが発生すると、システムがクラッシュします。 

MQ 使用後:多数のユーザーが急増したリクエストを行った場合、その膨大なトラフィック リクエストはシステム ビジネス処理の上位層で拒否され、インターフェースに直接流入するのではなく、MQ に転送されます。ここでは、MQ メッセージ キューがキャッシュとして機能します。

例: ピーク時に 100 万人のユーザーが 1 秒あたり 5,000 のリクエストをリクエストします。これらの 5,000 のリクエストを MQ システムに書き込むと、MySQL は 2,000 のリクエストしか処理できないため、1 秒あたり 2,000 のリクエストしか処理できません。システムは 1 秒あたり 2,000 のリクエストをプルします。対処できます。

MQ を使用する前に:

 MQ を使用した後:

5.4 その他のアプリケーション シナリオ:

1. 注文処理システム:

電子商取引プラットフォームでは、RabbitMQ を使用して注文を処理できます。ユーザーが注文すると、注文情報が RabbitMQ スイッチに公開され、関連するコンシューマーがキューから注文メッセージを取得して、注文の確認、在庫管理、支払いなどの処理を行います。

2. ログの収集と配布:

ログを生成する複数のアプリケーションがあり、それらを一元的に処理して保存したいとします。各アプリケーションは、「log_exchange」と呼ばれる交換にログ メッセージを公開でき、その後、さまざまなコンシューマが交換にサブスクライブして、ログ メッセージをデータベースに書き込むか、ログ分析システムに送信します。

3. リアルタイムのデータ送信:

リアルタイム監視システムがある場合、センサー データは処理および視覚表示のためにリアルタイムで監視プラットフォームに送信される必要があります。センサーはデータを RabbitMQ スイッチに発行し、監視プラットフォームのコンシューマーはスイッチをサブスクライブしてデータを処理することで、リアルタイムの監視とアラーム機能を実現します。

4. 非同期タスク処理:

画像処理や PDF 変換など、多くの時間のかかるタスクを処理する必要があるアプリケーションがあるとします。アプリケーションはタスクを RabbitMQ キューにパブリッシュし、複数のワーカー ノードがコンシューマとして機能してキューからタスクを取得して処理することで、タスクの並列処理を実現し、メイン アプリケーションへの負荷を軽減します。

5. メッセージ通知システム:

 購読システムで、ユーザーがさまざまなトピックやイベントを購読できるとします。新しいメッセージがパブリッシュされると、RabbitMQ はメッセージを対応するキューにルーティングし、キューをサブスクライブしているユーザーは対応する通知を受け取ります。このメソッドは、電子メールの購読、ニュースのプッシュ、その他の機能を実装するために使用できます。

6. マイクロサービスアーキテクチャ:

マイクロサービス アーキテクチャでは、異なるサービス間でメッセージングとコラボレーションが必要になる場合があります。RabbitMQを利用することでサービス間の分離と非同期通信が実現でき、各サービスはスイッチやキューを介してメッセージを送受信できるため、マイクロサービス間の疎結合を実現できます。

6. RabbitMQのインストール

公式サイトアドレス:

RabbitMQ: 使いやすく、柔軟なメッセージングとストリーミング — RabbitMQ

6.1 醸造インストール

brew update #更新一下homebrew
brew install rabbitmq   #安装rabbitMQ 

インストール結果:

==> 警告
==>
http://localhost:15672 でデフォルトで有効になっている Rabbitmq 管理プラグイン

アップグレード後に Rabbitmq を再起動するには:
  brew services restart Rabbitmq
または、バックグラウンド サービスが必要ない場合は、次のコマンドを実行するだけです:
  CONF_ENV_FILE="/opt/homebrew/etc/rabbitmq/rabbitmq-env.conf" /opt/ homebrew/opt/rabbitmq/sbin/rabbitmq-server

 Rabbitmq のインストール パス:

/opt/homebrew/opt/rabbitmq

6.2、環境変数を設定する

1、

vi ~/.bash_profile

2、 

export RABBIT_HOME=${PATH}:/opt/homebrew/opt/rabbitmq
export PATH=${PATH}:$RABBIT_HOME/sbin

3、 

source ~/.bash_profile

6.3、RabbitMQを起動する

1.フォアグラウンドで
Rabbitmq-serverを実行します。

2.バックグラウンドで
Rabbitmq-server-detachedを実行します。

3. 実行ステータスの表示
Rabbitmqctl ステータス

4. Web プラグインを開始します
Rabbitmq-plugins Enable Rabbitmq_management

5. 再起動
Rabbitmq-server restart

5.
Rabbitmqctl stopを閉じる

6.4. MQ へのアクセス

1. ブラウザのアドレス


http://localhost:15672/
デフォルトのユーザー名とパスワードは guest です

ユーザーの追加
Rabbitmqctl add_user miaojiang 123

ユーザーを管理者として設定します
Rabbitmqctl set_user_tags miaojiang 管理者

ユーザーが Rabbitmqctl にリモートでログインするように設定します。
set_permissions -p "/" miaojaing ".*" ".*" ".*"

新しく追加されたアカウントを表示する

Rabbitmqctl list_users

使用されている権限を表示
Rabbitmqctl list_permissions -p /

7、Spring Boot プロジェクト アプリケーション RabbitMQ

7.1. Maven 依存関係を追加します。

RabbitMQ クライアント ライブラリの依存関係をプロジェクトの pom.xml ファイルに追加します。

<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

7.2. RabbitMQ 接続の設定:

Spring Boot 構成ファイル (application.properties または application.yml) に RabbitMQ 接続情報を追加します。

アプリケーションのプロパティ:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

application.yml で mq パラメーターを構成します。

spring:
  rabbitmq:
    #设置RabbitMQ的IP地址
    host: localhost
    #设置rabbitmq服务器用户名
    username: guest
    #设置rabbitmq服务器密码
    password: guest
    #设置rabbitmq服务器连接端口
    port: 5672

7.3 スイッチの作成

カスタムスイッチ名

「myExchange」という名前の交換を作成します

package com.example.usermanagement.mq;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    /*
    使用 @Configuration 注解创建一个配置类,并通过 @Bean 注解创建了一个名为 declareExchange 的方法,用于声明创建交换机。请根据实际情况修改交换机名称、类型和持久化设置。
     */

    public static final String EXCHANGE_NAME = "myExchange";

    @Bean
    public Exchange declareExchange() {
        return ExchangeBuilder.directExchange(EXCHANGE_NAME)
                .durable(true)
                .build();
    }
}

7.4 メッセージ送信者の作成

メッセージ送信者の作成: RabbitMQ にメッセージを送信するためのメッセージ送信者クラスを作成します。

package com.example.usermanagement.mq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageSender{

    private final AmqpTemplate amqpTemplate;
    private final String exchangeName = "myExchange"; // 自定义交换机名称

    @Autowired
    public MessageSender(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    public void sendMessage(Object message) {
        amqpTemplate.convertAndSend(exchangeName, "", message); // 发送消息到默认交换机和空路由键
    }
}

知らせ:

 sendMessage タイプは Object タイプを使用します

7.5 列を追加するための RabbitMQ 管理の背景

ステップ:

  1. ブラウザを開き、RabbitMQ 管理バックグラウンドの URL を入力します。デフォルトでは、URL は ですhttp://localhost:15672/RabbitMQ サーバーが正しいポート番号で実行されていることを確認してください。

  2. ユーザー名とパスワードを入力して、RabbitMQ 管理バックグラウンドにログインします。デフォルトでは、ユーザー名は でguest、パスワードも ですguestユーザー名とパスワードを変更した場合は、カスタム認証情報を使用してログインしてください。

  3. ログインに成功すると、RabbitMQ 管理バックグラウンドのメイン インターフェイスが表示されます。上部のナビゲーション バーで、Queues[タブ] を選択します。

  4. このページにはQueues、既存のキューのリストが表示されます。新しいキューを作成する場合は、Add a new queueボタンをクリックします。

  5. キューを追加するページで、次の情報を入力します。

    • Name: キューの名前。キューに一意の名前を付けます。(myQueueなど)
    • Durability: キューの永続性。[はい] または [いいえ] を選択して、RabbitMQ サービスの再起動後もキューを維持するかどうかを指定します。
    • Auto delete:キューを自動削除します。[はい] または [いいえ] を選択して、最後のコンシューマーが切断したときにキューを削除するかどうかを指定します。
    • Arguments: キューの追加パラメータ。これはオプションで、キューに特定のパラメータをいくつか設定できます。
  6. キュー情報を入力したら、Add queueボタンをクリックしてキューを作成します。

  7. 作成が成功すると、Queues新しく追加されたキューがページに表示されます。このページでは、メッセージ数、コンシューマー数などのキューの詳細を表示できます。

http://localhost:15672/#/queues

キュー名を追加するだけです 

7.6 プロデューサーへの電話

1. インジェクションMessageSenderインスタンス

@Autowired
private MessageSender messageSender;

2. メッセージを送信する必要があるメソッドを呼び出しますmessageSender.sendMessageビジネス ロジックに応じて、適切な場所でこのメソッドを呼び出すことができます。たとえば、注文が正常に作成された後、次のコードを追加できます。

messageSender.sendMessage("订单已创建:" + order.getOrderId());

7.7 メッセージ受信者の作成

メッセージ レシーバーの作成: 受信した RabbitMQ メッセージを処理するためのメッセージ レシーバー クラスを作成します。

ここでは、RabbitMQ メッセージを処理するロジックを直接記述します。

package com.example.usermanagement.mq;

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageReceiver {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("your_queue_name"),
            exchange = @Exchange(value = RabbitMQConfig.EXCHANGE_NAME)
//            key = "your_routing_key"
    ))
    public void receiveMessage(Object message) {
        System.out.println("Received message: " + message);
        // 处理消息逻辑
    }
}

知らせ:

 sendMessage タイプは Object タイプを使用します

your_queue_nameリッスンするキューの名前に置き換えます(myQueue など) 。

your_routing_key適切なルーティング キーに置き換えます(使用されている場合)。

八、MQインターフェースの紹介

概要: サーバーとクラスターの情報、ノードのステータス、キューと接続の概要、および最近の関連ログ エントリを含む概要レポートを提供します。
接続: 接続名、プロトコル、仮想ホスト、その他の情報を含む、現在 RabbitMQ サーバーに接続しているクライアント アプリケーションを表示します。
チャネル: 各接続上のアクティブなチャネルと、各チャネルに関連するいくつかのメトリクス (コンシューマの数、未確認メッセージの数など) を表示します。
取引所: 名前、タイプ、バインドされたキュー、バインドされた数量を含むすべての取引所をリストします。
キュー (キュー): 名前、メッセージ数、コンシューマー数などの情報を含むすべてのキューを表示します。キューを介して、作成、削除、空などの一部の操作を実行することもできます。
Admin (管理者): ユーザーと権限の管理、仮想ホスト管理、プラグイン管理などの高度な管理機能を提供します。

8.1 概要

概要: サーバーとクラスターの情報、ノードのステータス、キューと接続の概要、および最近の関連ログ エントリを含む概要レポートを提供します。

8.2 接続

接続: 接続名、プロトコル、仮想ホスト、その他の情報を含む、現在 RabbitMQ サーバーに接続しているクライアント アプリケーションを表示します。

8.3 チャンネル


チャネル: 各接続上のアクティブなチャネルと、各チャネルに関連するいくつかのメトリクス (コンシューマの数、未確認メッセージの数など) を表示します。

8.3.1 プリフェッチ(先読み)

メッセージ キュー (メッセージ キュー) では、プリフェッチ (プリフェッチ) は重要な概念であり、コンシューマーがメッセージ キューからメッセージを取得する速度を制御するために使用されます。

プリフェッチとは、コンシューマによる高速処理のために、コンシューマがメッセージ キューからメッセージを取得する前に、一定数のメッセージをローカル キャッシュに取得することを指します。このようにして、システムのスループットと効率が向上し、ネットワーク送信のオーバーヘッドが削減されます。

具体的には、プリフェッチは次の状況を回避するのに役立ちます。

  1. 公平なディスパッチング: 複数のコンシューマーがメッセージを並行して処理する場合、プリフェッチ制限がない場合、1 つのコンシューマーが一度に大量のメッセージを取得する可能性があり、その結果、他のコンシューマーの機会が少なくなります。プリフェッチを設定すると、各コンシューマが特定の数のメッセージのみを取得できるようになり、より公平なメッセージ配信が実現されます。

  2. コンシューマの負荷分散: メッセージ キューに多数の保留中のメッセージがある場合、処理速度が遅いため、コンシューマはメッセージをバックログに記録する可能性があります。適切なプリフェッチ値を設定すると、コンシューマが毎回取得するメッセージの数を制限できるため、メッセージが複数のコンシューマに均等に分散され、負荷分散が実現されます。

RabbitMQ では、basic.qosメソッドを通じてプリフェッチの設定を行うことができます。たとえば、次のコードはプリフェッチ数を 10 に設定します。

channel.basic_qos(prefetch_count=10)

プリフェッチの設定は、特定のアプリケーション シナリオとシステム負荷条件に応じて調整する必要があることに注意してください。プリフェッチを適切に設定すると、システムのパフォーマンスと安定性が向上します。

8.4 交換機(スイッチ)


取引所: 名前、タイプ、バインドされたキュー、バインドされた数量を含むすべての取引所をリストします。

8.5 キュー (キュー)


キュー (キュー): 名前、メッセージ数、コンシューマー数などの情報を含むすべてのキューを表示します。キューを介して、作成、削除、空などの一部の操作を実行することもできます。

8.6 管理者(管理者)


Admin (管理者): ユーザーと権限の管理、仮想ホスト管理、プラグイン管理などの高度な管理機能を提供します。

おすすめ

転載: blog.csdn.net/qq_39208536/article/details/132227106