記事ディレクトリ
序文
RabbitMQ は、AMQP (Advanced Message Queuing Protocol) に基づいた再利用可能なエンタープライズ メッセージング システムであり、現在最も主流のメッセージ ミドルウェアの 1 つです。
erlang によって開発された AMQP (Advanced Message Queue Advanced Message Queuing Protocol) のオープン ソース実装。erlang 言語の高い同時実行特性により、優れたパフォーマンスを備えています。本質的にはキューです。FIFO は先入れ先出し方式であり、FIFO は先入れ先出し方式です。保存されている内容はメッセージです 以下はubuntu+cpolar+rabbitMQ環境下でmqサーバーへのリモートアクセスを実現します。
1.アーラン言語をインストールする
RabbitMQ は erlang 言語で実装されているため、erlang をインストールする必要があります
sudo apt-get install erlang-nox
2.rabbitMQをインストールする
最新バージョンの RabbitMQ をインストールする
sudo apt-get install rabbitmq-server
RabbitMQ のステータスを確認し、active(running)
オンラインであることを示します
sudo systemctl status rabbitmq-server
MQ にアクセスするためのユーザー名、アカウント、およびパスワードを設定します。admin はアカウント番号 (カスタマイズ可能) を表し、123456 はパスワード (カスタマイズ可能) を表します。
sudo rabbitmqctl add_user admin 123456
上記の管理者ユーザーの役割を設定します。管理者とは最高の管理者を意味します
sudo rabbitmqctl set_user_tags admin administrator
管理者ロールの権限を設定する
sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
上記の情報を設定したら、下に進みましょう。
3. イントラネットの浸透
次に、[cpolar] ( 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
- システムにサービスを追加する
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 を選択
クリック创建
オンライン トンネル リストを開き、ランダムなパブリック TCP アドレスを確認し、以下のランダムな TCP パブリック アドレスを使用して MQ にリモート接続します。
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 へのリモート アクセスを実装しました。
5. 固定パブリックネットワークTCPアドレス
上記で作成したトンネルはランダムアドレストンネルを使用しているため、24時間以内にアドレスが変化してしまうため、接続をより安定させるためにTCPアドレスも固定する必要があります。
5.1 固定パブリックネットワーク TCP ポートアドレスを予約する
cpolar 公式 Web サイトのバックエンドにログインし、左側の [予約] をクリックして、予約された TCP アドレスを選択します。
- 地域: 中国 VIP を選択
- 説明: カスタマイズ可能なメモ
クリック保留
アドレスが正常に予約されると、システムは対応する固定パブリック アドレスを生成してコピーします。
5.2 固定パブリックネットワーク TCP ポートアドレスの構成
ブラウザでポート 9200 にアクセスし、cpolar Web UI 管理インターフェイスにログインし、左側のダッシュボードで [トンネル管理] - [トンネル リスト] をクリックし、上で作成したトンネルを見つけて、右側の [編集] をクリックします。
トンネル情報を変更し、正常に予約された固定 TCP アドレスをトンネルに構成します。
- ポートタイプ: 固定 TCP ポートに変更されました
- 予約済みの TCP アドレス: 正常に予約されたアドレスを入力します。
クリック更新
トンネルが正常に更新されたら、左側のダッシュボードのステータス オンライン トンネル リストをクリックして、編集する必要があるトンネルを見つけます。パブリック ネットワーク アドレスが固定 TCP アドレスに更新されていることがわかります。
更新後、コード内の 2 つのパラメーターを変更します
//cpolar公网地址,改为我们固定的地址
factory.setHost("5.tcp.vip.cpolar.cn");
//固定地址对应的端口号
factory.setPort(13630);
次に、コンシューマ、次にプロデューサを再起動し、メッセージを通常どおりパブリッシュおよびコンシュームして、成功を示します。
cpolar イントラネット侵入記事からの転載:パブリック ネットワーク IP なし、外部パブリック ネットワークから RabbitMQ サービスへのリモート アクセス「イントラネット ペネトレーション」