Docker rocketmq デプロイメントの実装例

Docker rocketmq デプロイメントの実装例

私は最近 RocketMQ の使い方を学び、RocketMQ サーバーを構築する必要がありました。この記事では主に RocketMQ の構築プロセスと、このプロセスで遭遇したいくつかの落とし穴を記録します。

準備

ビルドする前に、いくつか準備が必要です。ここでは、docker を使用してサービスをビルドする必要があるため、事前に docker をインストールする必要があります。なお、rocketmq ではブローカーとネームサーバーの導入が必要であり、別途導入するのは面倒であることを考慮して、ここでは docker-compose を使用します。

rocketmq のアーキテクチャ図は次のとおりです。

さらに、MQ サービスのステータスとメッセージの消費を監視するための Web 視覚化コンソールを構築する必要もあります。ここでは Rocketmq-console が使用され、プログラムも docker を使用してインストールされます。

展開プロセス

まず、rocketmq docker イメージが必要です。ここでは、自分で作成することを選択できます。[email protected]:apache/rocketmq-docker.git を直接プルして、イメージを作成します。 Docker Hub の公式イメージを直接使用することもできます。イメージ名はrocketmqinc/rocketmqです。

次に、MQ 構成ファイルbroker.confを作成し、 /opt/rocketmq/confに配置します。構成は次のとおりです。

ブローカークラスタ名 = デフォルトクラスタ  
ブローカー名 = ブローカー-a  
ブローカーID = 0  
削除時 = 04  
ファイル予約時間 = 48  
ブローカーロール = ASYNC_MASTER  
フラッシュディスクタイプ = ASYNC_FLUSH  
# ローカルプログラムがクラウドホストのMQを呼び出す場合は、これをクラウドホストのIPに設定する必要があります
ブローカーIP1=10.10.101.80

次のフォルダーを作成します: /opt/rocketmq/logs/opt/rocketmq/store 、最後に次の構成で docker-compose.yml ファイルを作成します。

バージョン: '2'
サービス:
  名前rv:
    画像: rocketmqinc/rocketmq
    コンテナ名: rmqnamesrv
    ポート:
      -9876:9876
    ボリューム:
      - /opt/rocketmq/logs:/home/rocketmq/logs
      - /opt/rocketmq/store:/home/rocketmq/store
    コマンド: sh mqnamesrv
  ブローカ:
    画像: rocketmqinc/rocketmq
    コンテナ名: rmqbroker
    ポート:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    ボリューム:
      - /opt/rocketmq/logs:/home/rocketmq/logs
      - /opt/rocketmq/store:/home/rocketmq/store
      - /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    #コマンド: sh mqbroker -n namesrv:9876
    コマンド: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
    依存:
      -名前
    環境:
      JAVA_HOME = /usr/lib/jvm/jre
  コンソール:
    画像: styletang/rocketmq-console-ng
    コンテナ名: rocketmq-console-ng
    ポート:
      -8087:8080
    依存:
      -名前
    環境:
      -JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876 
      - Dcom.rocketmq.sendMessageWithVIPChannel=false

注記

ここで注意すべき点は、rocketmq ブローカーと rokcetmq-console の両方が rokcetmq ネームサーバーに接続する必要があり、ネームサーバーの IP を知っておく必要があることです。 docker-compose を使用すると、上記 3 つの Docker コンテナが一緒にオーケストレーションされます。ネーム サーバ コンテナ名 rmqnamesrv など、コンテナ IP の代わりにコンテナ名を直接使用できます。

設定が完了したら、docker-compose up を実行して 3 つのコンテナを起動します。起動に成功したら、ip:8087 にアクセスして、mq 外部コンソールを確認します。次の情報が表示されれば、rocketmq サービスが正常に起動しています。

RocketMQ の初体験

ここでは、Springboot を使用して MQ をすぐに使い始めるため、 rocketmq-spring-boot-starterモジュールを使用します。POM 構成は次のとおりです。

<!--pom.xml に依存関係を追加する-->
<依存関係>
    <グループ ID>org.apache.rocketmq</グループ ID>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <バージョン>2.0.3</バージョン>
</依存関係>

コンシューマー サービス センダーは次のように構成されます。

## アプリケーション.プロパティ
rocketmq.name-server=ip:9876
rocketmq.producer.group=私のグループ

消費者サービス送信者の手順は次のとおりです。

@SpringBootアプリケーション
パブリッククラス ProducerApplication は CommandLineRunner を実装します {
    @リソース
    プライベート RocketMQTemplate rocketMQTemplate;

    パブリック静的void main(String[] args){
        SpringApplication.run(ProducerApplication.class、引数);
    }

    パブリック void run(String...args) 例外をスローします {
        rocketMQTemplate.convertAndSend("test-topic-1", "Hello, World!");
        rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hello, World! 私は Spring のメッセージから来ました").build());
    }

}

メッセージ コンシューマーの構成は次のとおりです。

## アプリケーション.プロパティ
rocketmq.name-server=ip:9876

メッセージ コンシューマーは次のプログラムを実行します。

@SpringBootアプリケーション
パブリッククラス ConsumerApplication{

    パブリック静的void main(String[] args){
        SpringApplication.run(ConsumerApplication.class、引数);
    }

    翻訳者
    @サービス
    @RocketMQMessageListener(トピック = "test-topic-1", コンシューマーグループ = "my-consumer_test-topic-1")
    パブリック静的クラス MyConsumer1 は RocketMQListener<String> を実装します {
        パブリックvoid onMessage(文字列メッセージ) {
            log.info("受信したメッセージ: {}", message);
        }
    }
}

関連する質問

メッセージ送信者はCaused by: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout

この例外は、brokerip が正しく設定されていないために発生します。ブローカー構成情報を表示するには、mq サービス コンソールにログインしてください。

上記の192.168.128.3:10911は、ホストの内部 IP である Docker コンテナの IP です。ここで、IP をクラウド ホストの IP に設定し、 broker.confbrokerIP1パラメータを変更する必要があります。

MQ コンソールでは MQ サービス情報を正常に表示できません。

この問題は主に、ネームサーバーの IP 設定が正しくないことが原因で発生します。現時点で接続されているネームサーバーのアドレス情報を確認するには、MQ コンソールの操作とメンテナンス ページを確認してください。

ここで設定されているアドレスは127.0.0.1:9876であることがわかります。ここでの MQ コンソールは Docker コンテナを使用しているため、コンテナ内の127.0.0.1:9876に直接アクセスすると、ホスト マシン内の正しいプログラムではなく、コンテナ自体にアクセスします。

ここでは、Docker で環境変数を設定する必要があります。設定は次のとおりです。

-JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876

ヘルプドキュメント

ロケットMQドッカー
RocketMq Dockerの構築と基本概念
RocketMQ-スプリング

著者:Leo_wl

出典: http://www.cnblogs.com/Leo_wl/

Docker rocketmq デプロイメントの実装例に関するこの記事はこれで終わりです。より関連性の高い Docker rocketmq デプロイメントのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • RocketMQ が設計した障害回避メカニズム
  • RabbitMQ、RocketMQ、Kafka トランザクション、メッセージ損失、メッセージシーケンス、メッセージ重複処理戦略の問題
  • RocketMQ 設計における非同期ディスクフラッシュ
  • RocketMQ 設計の同期ディスクフラッシュ
  • RocketMQはマスタースレーブレプリケーションと読み取り書き込み分離を設計します

<<:  モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

>>:  mysql-connector-java8.0.27 へのアップグレードに関する注意事項

推薦する

Linux で MySQL 5.6 X64 バージョンをインストールする詳細な手順

環境: 1. CentOS6.5 X64 2.mysql-5.6.34-linux-glibc2.5...

Linux での GDB 入門チュートリアル

序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...

MySQLデータベースの基礎知識

目次1. データベースを理解する1.1 データベースとデータ構造の関係1.2 なぜデータベースが必要...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

MySQLオンラインデッドロック分析練習

序文MySQL を学習する際に、MySQL のロック メカニズムについて簡単に理解したことがあると思...

Lua モジュールを使用して WAF を実装する Nginx の原理の分析

目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...

Linux における SUID、SGID、SBIT の素晴らしい使い方の詳細な説明

序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...

InnoDB テーブルの BLOB 列と TEXT 列のストレージ効率を最適化します。

まず、MySQL InnoDB エンジンのストレージ形式に関する重要なポイントをいくつか紹介します。...

ウェブサイト上のWeiboコンポーネントの再設計の詳細な紹介(写真とテキスト)

前面に書かれたWeibo コンポーネントは、サードパーティのアクセス ユーザーが開発を必要とせずに ...

IIS 7.5はURL書き換えモジュールを使用してWebページのリダイレクトを実現します。

Apache では構成ファイルで Web ページまたは Web サイトの書き換えを簡単に設定できる...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

Windows 上で Zookeeper サーバーを構築するチュートリアル

インストールと設定Apacheの公式ウェブサイトには多くのミラーダウンロードアドレスが用意されており...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

XHTMLにおけるH1タグの位置について

最近、H1 については多くの議論が行われていますが (記事のコンテンツ ページ内)、おおよそ 2 つ...

Vue ベースの Excel 解析とエクスポートの詳細な説明

目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...