網(wǎng)站建設(shè)方案書應(yīng)急處置方案seoul是什么意思
文章目錄
- 前言
- 1.安裝erlang 語言
- 2.安裝rabbitMQ
- 3. 內(nèi)網(wǎng)穿透
- 3.1 安裝cpolar內(nèi)網(wǎng)穿透(支持一鍵自動安裝腳本)
- 3.2 創(chuàng)建HTTP隧道
- 4. 公網(wǎng)遠(yuǎn)程連接
- 5.固定公網(wǎng)TCP地址
- 5.1 保留一個(gè)固定的公網(wǎng)TCP端口地址
- 5.2 配置固定公網(wǎng)TCP端口地址
轉(zhuǎn)載自遠(yuǎn)控源碼文章:無公網(wǎng)IP,在外公網(wǎng)遠(yuǎn)程訪問RabbitMQ服務(wù)「內(nèi)網(wǎng)穿透」
前言
RabbitMQ是一個(gè)在 AMQP(高級消息隊(duì)列協(xié)議)基礎(chǔ)上完成的,可復(fù)用的企業(yè)消息系統(tǒng),是當(dāng)前最主流的消息中間件之一。
由erlang開發(fā)的AMQP(Advanced Message Queue 高級消息隊(duì)列協(xié)議 )的開源實(shí)現(xiàn),由于erlang 語言的高并發(fā)特性,性能較好,本質(zhì)是個(gè)隊(duì)列,FIFO 先入先出,里面存放的內(nèi)容是message,下面介紹通過在ubuntu+cpolar+rabbitMQ環(huán)境下,實(shí)現(xiàn)mq服務(wù)端遠(yuǎn)程訪問。
1.安裝erlang 語言
由于rabbitMQ是erlang語言實(shí)現(xiàn)的,所以我們需要安裝erlang
sudo apt-get install erlang-nox
2.安裝rabbitMQ
安裝最新版rabbitMQ
sudo apt-get install rabbitmq-server
查看rabbitMQ狀態(tài),active(running)
表示在線
sudo systemctl status rabbitmq-server
設(shè)置訪問MQ用戶名賬號和密碼,admin表示賬號(可自定義),123456表示密碼(可自定義)
sudo rabbitmqctl add_user admin 123456
設(shè)置上面admin用戶的角色,administrator表示是最高管理員
sudo rabbitmqctl set_user_tags admin administrator
設(shè)置admin角色權(quán)限
sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
以上信息設(shè)置好后,我們往下走。
3. 內(nèi)網(wǎng)穿透
接著我們使用cpolar穿透本地MQ服務(wù),使得遠(yuǎn)程可以進(jìn)行訪問連接,cpolar支持http/https/tcp協(xié)議,不限制流量,操作簡單,無需公網(wǎng)IP,也無需路由器。
cpolar官網(wǎng):https://www.cpolar.com/
3.1 安裝cpolar內(nèi)網(wǎng)穿透(支持一鍵自動安裝腳本)
- cpolar 安裝(國內(nèi)使用)
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
- token認(rèn)證
登錄cpolar官網(wǎng)后臺,點(diǎn)擊左側(cè)的驗(yàn)證,查看自己的認(rèn)證token,之后將token貼在命令行里
cpolar authtoken xxxxxxx
- 向系統(tǒng)添加服務(wù)
sudo systemctl enable cpolar
- 啟動cpolar服務(wù)
sudo systemctl start cpolar
正常顯示為active
則表示服務(wù)為正常在線啟動狀態(tài)
3.2 創(chuàng)建HTTP隧道
在ubuntu系統(tǒng)本地安裝cpolar內(nèi)網(wǎng)穿透之后,在ubuntu瀏覽器上訪問本地9200端口,打開cpolar web ui界面:http://127.0.0.1:9200。
點(diǎn)擊左側(cè)儀表盤的隧道管理——?jiǎng)?chuàng)建隧道,由于rabbitMQ中默認(rèn)的是5672端口,因此我們要來創(chuàng)建一條http隧道,指向5672端口:
- 隧道名稱:可自定義,注意不要重復(fù)
- 協(xié)議:tcp
- 本地地址:5672
- 域名類型:選擇隨機(jī)域名
- 地區(qū):選擇China VIP
點(diǎn)擊創(chuàng)建
打開在線隧道列表,查看隨機(jī)公網(wǎng)tcp地址,使用下面隨機(jī)的tcp公網(wǎng)地址,即可遠(yuǎn)程連接MQ
4. 公網(wǎng)遠(yuǎn)程連接
maven坐標(biāo)
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version></dependency>
這里使用java 測試使用上面公網(wǎng)地址進(jìn)行連接,編寫發(fā)布者
ConnectionFactory factory = new ConnectionFactory();//cpolar公網(wǎng)地址factory.setHost("1.tcp.cpolar.cn");//公網(wǎng)地址對于的端口號factory.setPort(24889);//用戶名和密碼factory.setUsername("admin");factory.setPassword("123456");Connection connection = null;Channel channel = null;try {// 1.創(chuàng)建連接和通道connection = factory.newConnection();channel = connection.createChannel();// 2.為通道聲明exchange和exchange的類型channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);String msg = " hello world";// 3.發(fā)送消息到指定的exchange,隊(duì)列指定為空,由exchange根據(jù)情況判斷需要發(fā)送到哪些隊(duì)列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.關(guān)閉連接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();}}}
編寫消費(fèi)者
ConnectionFactory factory = new ConnectionFactory();//cpolar公網(wǎng)地址factory.setHost("1.tcp.cpolar.cn");//公網(wǎng)地址對于的端口號factory.setPort(24889);//用戶名和密碼factory.setUsername("admin");factory.setPassword("123456");Connection connection = null;Channel channel = null;try {// 1.創(chuàng)建連接和通道connection = factory.newConnection();channel = connection.createChannel();// 2.為通道聲明exchange以及exchange類型channel.exchangeDeclare("exchange", BuiltinExchangeType.FANOUT);// 3.創(chuàng)建隨機(jī)名字的隊(duì)列String queueName = channel.queueDeclare().getQueue();// 4.建立exchange和隊(duì)列的綁定關(guān)系channel.queueBind(queueName, "exchange", "");System.out.println(" **** Consumer1 keep alive ,waiting for messages, and then deal them");// 5.通過回調(diào)生成消費(fèi)者并進(jìn)行監(jiān)聽Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {// 獲取消息內(nèi)容然后處理String msg = new String(body, "UTF-8");System.out.println("*********** Consumer1" + " get message :[" + msg + "]");}};// 6.消費(fèi)消息channel.basicConsume(queueName, true, consumer);} catch (IOException e) {e.printStackTrace();} catch (TimeoutException e) {e.printStackTrace();}
先啟動消費(fèi)者,然后啟動發(fā)布者,然后消費(fèi)者控制臺輸出消費(fèi)者發(fā)送的消息表示成功.我們實(shí)現(xiàn)了遠(yuǎn)程訪問MQ。
5.固定公網(wǎng)TCP地址
由于以上創(chuàng)建的隧道使用的是隨機(jī)地址隧道,地址會在24小時(shí)內(nèi)變化,為了使連接更加穩(wěn)定,我們還需要固定tcp地址。
5.1 保留一個(gè)固定的公網(wǎng)TCP端口地址
登錄cpolar官網(wǎng)后臺,點(diǎn)擊左側(cè)的預(yù)留,選擇保留的TCP地址。
- 地區(qū):選擇China VIP
- 描述:即備注,可自定義填寫
點(diǎn)擊保留
地址保留成功后,系統(tǒng)會生成相應(yīng)的固定公網(wǎng)地址,將其復(fù)制下來
5.2 配置固定公網(wǎng)TCP端口地址
在瀏覽器上訪問9200端口,登錄cpolar web ui管理界面,點(diǎn)擊左側(cè)儀表盤的隧道管理——隧道列表,找到上面創(chuàng)建的隧道,點(diǎn)擊右側(cè)的編輯
修改隧道信息,將保留成功的固定tcp地址配置到隧道中
- 端口類型:修改為固定tcp端口
- 預(yù)留的tcp地址:填寫保留成功的地址
點(diǎn)擊更新
隧道更新成功后,點(diǎn)擊左側(cè)儀表盤的狀態(tài)在線隧道列表,找到需要編輯的隧道,可以看到公網(wǎng)地址已經(jīng)更新成為了固定TCP地址。
更新好后,我們修改代碼中的兩個(gè)參數(shù)
//cpolar公網(wǎng)地址,改為我們固定的地址factory.setHost("5.tcp.vip.cpolar.cn");//固定地址對應(yīng)的端口號factory.setPort(13630);
然后我們重新啟動消費(fèi)者,再啟動生產(chǎn)者,正常發(fā)布和消費(fèi)消息表示成功