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 へのアップグレードに関する注意事項

推薦する

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...

Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。

かなり前に実装された機能ですが、クリックすると選択したメニュー項目の背景色が白くなることに気付きまし...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

Vue の this.$store.state.xx.xx に関する簡単な説明

目次これを Vue.$store.state.xx.xxストアからデータを取得する私のプロジェクトフ...

Linux仮想メモリについての簡単な説明

目次起源仮想メモリページングとページテーブルメモリのアドレス指定と割り当て関数プロセスメモリ管理デー...

vue-cli 3 で vue-bootstrap-datetimepicker 日付プラグインを使用する方法

需要背景最近、Vue を使用してフロントエンド エンジニアリング システムと組み合わせ、以前のデモを...

Mysql の 2 つのテーブル間の結合クエリの 4 つの状況の概要

一般的に言えば、より完全な結果を得るためには、2 つ以上のテーブルから結果を取得する必要があります。...

Dockerfile echoは、指定されたファイル内の複数行のテキストを実装する方法を指定します。

Dockerfile内の指定されたファイルに複数の行を追加します。echoの後の「$」記号に注意し...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

Vueコンポーネントの作成方法と使用方法を説明する記事

目次1. コンポーネントとは何ですか? 2. グローバルコンポーネントを作成する方法1 1. Vue...

JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...

Vueでミックスインを使用する方法

目次序文使い方要約する序文Vue にはコードの再利用に使われる mixins という設定項目がありま...

react setStateの詳細な説明

目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...

Dockerはrabbitmqのサンプルコードをインストールして実行します

イメージをプルします: [mall@VM_0_7_centos ~]$ sudo docker pu...