ubuntu+cpolar+rabbitMQ環境でmqサーバーのリモートアクセスを実現

序文

RabbitMQ は、AMQP (Advanced Message Queuing Protocol) に基づいた再利用可能なエンタープライズ メッセージ システムであり、現在最も主流のメッセージ ミドルウェアの 1 つです。
erlang によって開発された AMQP (Advanced Message Queue Advanced Message Queuing Protocol) のオープンソース実装は、erlang 言語の高い同時実行性によりパフォーマンスが向上しており、ubuntu+cpolar+rabbitMQ の環境では、mq サーバーへのリモート アクセスが可能です。気がついた。

1.アーラン言語をインストールする

RabbitMQ は erlang 言語で実装されているため、erlang をインストールする必要があります

sudo apt-get install erlang-nox

2.rabbitMQをインストールする

最新バージョンの RabbitMQ をインストールする

sudo apt-get install rabbitmq-server

画像-20230227142614479

RabbitMQ のステータスを確認します。active(running)オンラインであることを意味します

sudo systemctl status rabbitmq-server

画像-20230227142756286

アクセス MQ ユーザー名アカウントとパスワードを設定します。admin はアカウント (カスタマイズ可能) を意味し、123456 はパスワード (カスタマイズ可能) を意味します

sudo rabbitmqctl add_user admin 123456

画像-20230228152150865

上記の管理者ユーザーの役割を設定します。管理者とは最高の管理者を意味します

sudo rabbitmqctl set_user_tags admin administrator

画像-20230228153113674

管理者ロールの権限を設定する

sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

画像-20230228153441392

上記の情報を設定したら、下に進みます。

3. イントラネットの浸透

次に、cpolar を使用してローカル MQ サービスに侵入し、リモート アクセスに接続できるようにします。cpolar は http/https/tcp プロトコルをサポートし、トラフィックを制限せず、操作が簡単です。パブリック ネットワーク IP やルーターは必要ありません。

cpolar公式サイト: https: //www.cpolar.com/

3.1 cpolar イントラネット ペネトレーションのインストール (ワンクリック自動インストール スクリプトをサポート)

  • cpolar の設置 (国内使用)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • または cpolar ショートリンクのインストール方法: (海外向け)
curl -sL https://git.io/cpolar | sudo bash
  • バージョン番号を表示する
cpolar version
  • トークン認証

cpolar 公式 Web サイトの背景にログインし、左側の検証をクリックして認証トークンを表示し、コマンド ラインにトークンを貼り付けます。

cpolar authtoken xxxxxxx

20230116114805

  • システムにサービスを追加する
sudo systemctl enable cpolar
  • cpolarサービスを開始する
sudo systemctl start cpolar

正常に と表示されていればactive、サービスは通常のオンライン起動状態にあります。

3.2 HTTPトンネルの作成

cpolar イントラネット ペネトレーションを ubuntu システムにローカルにインストールした後、ubuntu ブラウザでローカル ポート 9200 にアクセスし、cpolar Web UI インターフェイス http://127.0.0.1:9200 を開きます

左側のダッシュボードで [トンネル管理] - [トンネルの作成] をクリックします。 RabbitMQ のデフォルト ポートは 5672 であるため、ポート 5672 を指す http トンネルを作成する必要があります。

  • トンネル名: カスタマイズ可能、重複しないように注意してください
  • プロトコル: tcp
  • 現地住所: 5672
  • ドメインの種類: ランダムなドメイン名を選択します
  • 地域: 中国 VIP を選択

クリック创建

画像-20230227174954395

オンライン トンネル リストを開き、ランダムなパブリック ネットワークの TCP アドレスを確認し、次のランダムな TCP パブリック ネットワーク アドレスを使用すると、リモートで MQ に接続できます。

画像-20230228114252675

4. パブリックネットワーク経由のリモート接続

メイブン座標

<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>5.10.0</version>
		</dependency>

ここでは Java テストを使用して上記のパブリック ネットワーク アドレスを使用して接続し、パブリッシャーを書き込みます

       ConnectionFactory factory = new ConnectionFactory();
        //cpolar公网地址
        factory.setHost("1.tcp.cpolar.cn");
        //公网地址对于的端口号
        factory.setPort(24889);

        //用户名和密码
        factory.setUsername("admin");
        factory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
    
    
            // 1.创建连接和通道
            connection = factory.newConnection();
            channel = connection.createChannel();

            // 2.为通道声明exchange和exchange的类型
            channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);

            String msg = " hello world";
            // 3.发送消息到指定的exchange,队列指定为空,由exchange根据情况判断需要发送到哪些队列
            channel.basicPublish(EXCHANGE_NAME, "", null, msg.getBytes());
            System.out.println("product send a msg: " + msg);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (TimeoutException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            // 4.关闭连接
            if (channel != null) {
    
    
                try {
    
    
                    channel.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                } catch (TimeoutException e) {
    
    
                    e.printStackTrace();
                }
            }

            if (connection != null) {
    
    
                try {
    
    
                    connection.close();
                } catch (IOException e) {
    
    
                    e.printStackTrace();
                }
            }
        }


書き込みコンシューマ


        ConnectionFactory factory = new ConnectionFactory();
        //cpolar公网地址
        factory.setHost("1.tcp.cpolar.cn");
        //公网地址对于的端口号
        factory.setPort(24889);

        //用户名和密码
        factory.setUsername("admin");
        factory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
    
    
            // 1.创建连接和通道
            connection = factory.newConnection();
            channel = connection.createChannel();

            // 2.为通道声明exchange以及exchange类型
            channel.exchangeDeclare("exchange", BuiltinExchangeType.FANOUT);

            // 3.创建随机名字的队列
            String queueName = channel.queueDeclare().getQueue();

            // 4.建立exchange和队列的绑定关系
            channel.queueBind(queueName, "exchange", "");
            System.out.println(" **** Consumer1 keep alive ,waiting for messages, and then deal them");
            // 5.通过回调生成消费者并进行监听
            Consumer consumer = new DefaultConsumer(channel) {
    
    
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope,
                                           com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {
    
    

                    // 获取消息内容然后处理
                    String msg = new String(body, "UTF-8");
                    System.out.println("*********** Consumer1" + " get message :[" + msg + "]");
                }
            };
            // 6.消费消息
            channel.basicConsume(queueName, true, consumer);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } catch (TimeoutException e) {
    
    
            e.printStackTrace();
        }

最初にコンシューマを起動し、次にパブリッシャを起動し、コンシューマ コンソールはコンシューマによって送信された成功を示すメッセージを出力します。MQ へのリモート アクセスを実装しました。

画像-20230228174014355

5. 固定パブリックネットワークTCPアドレス

上記で作成したトンネルはランダムアドレストンネルを使用しているため、24時間以内にアドレスが変化してしまうため、接続をより安定させるためにTCPアドレスも固定する必要があります。

5.1 固定パブリックネットワーク TCP ポートアドレスを予約する

cpolar 公式 Web サイトの背景にログインし、左側の [予約済み] をクリックして、予約済みの TCP アドレスを選択します。

  • 地域: 中国 VIP を選択
  • 説明: 備考。カスタマイズ可能

クリック保留

画像-20230228175005804

アドレスが正常に予約されると、システムは対応する固定パブリック ネットワーク アドレスを生成し、それをコピーします。

画像-20230228175229884

5.2 固定パブリックネットワーク TCP ポートアドレスの構成

ブラウザでポート 9200 にアクセスし、cpolar Web UI 管理インターフェイスにログインし、左側のダッシュボードで [トンネル管理] - [トンネル リスト] をクリックし、上で作成したトンネルを見つけて、右側の [編集] をクリックします。

画像-20230228175405748

トンネル情報を変更し、正常に予約された固定 TCP アドレスをトンネルに設定します。

  • ポートタイプ: 固定 TCP ポートに変更されました
  • 予約済みの TCP アドレス: 正常に予約されたアドレスを入力します。

クリック更新

画像-20230228175516881

トンネルが正常に更新されたら、左側のダッシュボードでステータス オンライン トンネル リストをクリックし、編集するトンネルを見つけます。パブリック ネットワーク アドレスが固定 TCP アドレスに更新されたことがわかります。

画像-20230228175557721

更新後、コード内の 2 つのパラメーターを変更します。

     	//cpolar公网地址,改为我们固定的地址
        factory.setHost("5.tcp.vip.cpolar.cn");
        //固定地址对应的端口号
        factory.setPort(13630);

次に、コンシューマを再起動し、次にプロデューサを再起動し、メッセージを通常どおりパブリッシュおよびコンシュームして成功を示します。

画像-20230228175908567

おすすめ

転載: blog.csdn.net/m0_70980326/article/details/132353850