在ubuntu+cpolar+rabbitMQ環境下,實現mq服務端遠程訪問

文章目錄

  • 前言
  • 1.安裝erlang 語言
  • 2.安裝rabbitMQ
  • 3. 內網穿透
    • 3.1 安裝cpolar內網穿透(支持一鍵自動安裝腳本)
    • 3.2 創建HTTP隧道
  • 4. 公網遠程連接
  • 5.固定公網TCP地址
    • 5.1 保留一個固定的公網TCP端口地址
    • 5.2 配置固定公網TCP端口地址

前言

RabbitMQ是一個在 AMQP(高級消息隊列協議)基礎上完成的,可復用的企業消息系統,是當前最主流的消息中間件之一。
由erlang開發的AMQP(Advanced Message Queue 高級消息隊列協議 )的開源實現,由于erlang 語言的高并發特性,性能較好,本質是個隊列,FIFO 先入先出,里面存放的內容是message,下面介紹通過在ubuntu+cpolar+rabbitMQ環境下,實現mq服務端遠程訪問。

1.安裝erlang 語言

由于rabbitMQ是erlang語言實現的,所以我們需要安裝erlang

sudo apt-get install erlang-nox

2.安裝rabbitMQ

安裝最新版rabbitMQ

sudo apt-get install rabbitmq-server

image-20230227142614479

查看rabbitMQ狀態,active(running)表示在線

sudo systemctl status rabbitmq-server

image-20230227142756286

設置訪問MQ用戶名賬號和密碼,admin表示賬號(可自定義),123456表示密碼(可自定義)

sudo rabbitmqctl add_user admin 123456

image-20230228152150865

設置上面admin用戶的角色,administrator表示是最高管理員

sudo rabbitmqctl set_user_tags admin administrator

image-20230228153113674

設置admin角色權限

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

image-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
  • token認證

登錄cpolar官網后臺,點擊左側的驗證,查看自己的認證token,之后將token貼在命令行里

cpolar authtoken xxxxxxx

20230116114805

  • 向系統添加服務
sudo systemctl enable cpolar
  • 啟動cpolar服務
sudo systemctl start cpolar

正常顯示為active則表示服務為正常在線啟動狀態

3.2 創建HTTP隧道

在ubuntu系統本地安裝cpolar內網穿透之后,在ubuntu瀏覽器上訪問本地9200端口,打開cpolar web ui界面:http://127.0.0.1:9200。

點擊左側儀表盤的隧道管理——創建隧道,由于rabbitMQ中默認的是5672端口,因此我們要來創建一條http隧道,指向5672端口:

  • 隧道名稱:可自定義,注意不要重復
  • 協議:tcp
  • 本地地址:5672
  • 域名類型:選擇隨機域名
  • 地區:選擇China VIP

點擊創建

image-20230227174954395

打開在線隧道列表,查看隨機公網tcp地址,使用下面隨機的tcp公網地址,即可遠程連接MQ

image-20230228114252675

4. 公網遠程連接

maven坐標

<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) {@Overridepublic 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。

image-20230228174014355

5.固定公網TCP地址

由于以上創建的隧道使用的是隨機地址隧道,地址會在24小時內變化,為了使連接更加穩定,我們還需要固定tcp地址。

5.1 保留一個固定的公網TCP端口地址

登錄cpolar官網后臺,點擊左側的預留,選擇保留的TCP地址。

  • 地區:選擇China VIP
  • 描述:即備注,可自定義填寫

點擊保留

image-20230228175005804

地址保留成功后,系統會生成相應的固定公網地址,將其復制下來

image-20230228175229884

5.2 配置固定公網TCP端口地址

在瀏覽器上訪問9200端口,登錄cpolar web ui管理界面,點擊左側儀表盤的隧道管理——隧道列表,找到上面創建的隧道,點擊右側的編輯

image-20230228175405748

修改隧道信息,將保留成功的固定tcp地址配置到隧道中

  • 端口類型:修改為固定tcp端口
  • 預留的tcp地址:填寫保留成功的地址

點擊更新

image-20230228175516881

隧道更新成功后,點擊左側儀表盤的狀態在線隧道列表,找到需要編輯的隧道,可以看到公網地址已經更新成為了固定TCP地址。

image-20230228175557721

更新好后,我們修改代碼中的兩個參數

     	//cpolar公網地址,改為我們固定的地址factory.setHost("5.tcp.vip.cpolar.cn");//固定地址對應的端口號factory.setPort(13630);

然后我們重新啟動消費者,再啟動生產者,正常發布和消費消息表示成功

image-20230228175908567

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41485.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41485.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41485.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用opencv4.7.0部署yolov5

yolov5原理和部署原理就不說了&#xff0c;想了解的可以看看這篇部署原理文章 #include <fstream> #include <sstream> #include <iostream> #include <opencv2/dnn.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp>/…

【Java轉Go】快速上手學習筆記(二)之基礎篇一

目錄 創建項目數據類型變量常量類型轉換計數器鍵盤交互流程控制代碼運算符 創建項目 上篇我們安裝好了Go環境&#xff0c;和用IDEA安裝Go插件來開發Go項目&#xff1a;【Java轉Go】快速上手學習筆記&#xff08;一&#xff09;之環境安裝篇 。 這篇我們開始正式學習Go語言。我…

MyBatis動態SQL:打造靈活可變的數據庫操作

目錄 if標簽trim標簽where標簽set標簽foreach標簽 動態SQL就是根據不同的條件或需求動態地生成查詢語句&#xff0c;比如動態搜索條件、動態表或列名、動態排序等。 if標簽 在我們填寫一些信息時&#xff0c;有些信息是必填字段&#xff0c;有的則是非必填的&#xff0c;這些…

淘寶API接口的實時數據和緩存數據區別

電商API接口實時數據是指通過API接口獲取到的與電商相關的實時數據。這些數據可以包括商品庫存、訂單狀態、銷售額、用戶活躍度等信息。 通過電商API接口&#xff0c;可以實時獲取到電商平臺上的各種數據&#xff0c;這些數據可以幫助企業或開發者做出及時的決策和分析。例如&…

vue動態修改audio地址

問題&#xff1a;點擊后替換url地址&#xff0c;實現了&#xff0c;但是播放器依舊沒有反應。 解決&#xff1a;vue中動態替換只是替換了地址&#xff0c;并沒有告訴audio標簽是否要執行&#xff0c;執行什么操作。要load后才能讓它知道&#xff0c;是在喊他&#xff0c;他需求…

秒懂算法 | 漢諾塔問題與木棒三角形

在數學與計算機科學中&#xff0c;遞歸(recursion)是指一個過程或函數在其定義或說明中又直接或間接調用自身的一種方法。它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解。遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算&#x…

Android性能優化——線程優化

一、線程調度原理 在任意時刻&#xff0c;CPU只能執行一條指令&#xff0c;每個線程獲取到CPU的使用權之后才可以執行指令也就是說在任意時刻&#xff0c;只有一個線程占用CPU 處于運行狀態 多線程并發&#xff0c;實際上是指多個線程輪流獲取CPU 的使用權然后分別執行各自的任…

系統安全測試要怎么做?

進行系統安全測試時&#xff0c;可以按照以下詳細的步驟進行&#xff1a; 1、信息收集和分析&#xff1a; 收集系統的相關信息&#xff0c;包括架構、部署環境、使用的框架和技術等。 分析系統的安全需求、威脅模型和安全策略等文檔。 2、威脅建模和風險評估&#xff1a; 使…

調用被fishhook的原函數

OC類如果通過runtime被hook了&#xff0c;可以通過逆序遍歷方法列表的方式調用原方法。 那系統庫的C函數被fish hook了該怎么辦呢&#xff1f; 原理和OC類異曲同工&#xff0c;即通過系統函數dlopen()獲取動態庫&#xff0c;以動態庫為參數通過系統函數dlsym()即可獲取目標系統…

leetcode292. Nim 游戲(博弈論 - java)

Nim 游戲 Nim 游戲題目描述博弈論 上期經典算法 Nim 游戲 難度 - 簡單 原題鏈接 - Nim游戲 題目描述 你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a; 桌子上有一堆石頭。 你們輪流進行自己的回合&#xff0c; 你作為先手 。 每一回合&#xff0c;輪到的人拿掉 1 -…

494. 目標和

494. 目標和 原題鏈接&#xff1a;完成情況&#xff1a;解題思路&#xff1a;數組回溯法動態規劃 參考代碼&#xff1a;數組回溯法__494目標和__動態規劃 經驗吸取 原題鏈接&#xff1a; 494. 目標和 https://leetcode.cn/problems/target-sum/description/ 完成情況&#…

Android進階之多級列表

遇到一個需求需要顯示多級列表&#xff0c;因為界面是在平板上的&#xff0c;所以層級是從左向右往下排的&#xff0c;類似于 我當時的寫法是在xml布局里一個個RecyclerView往下排的 當然前提是已經規定好最大的層級我才敢如此去寫界面&#xff0c;如果已經明確規定只有兩級或…

69 # 強制緩存的配置

強制緩存 強制緩存&#xff1a;以后的請求都不需要訪問服務器&#xff0c;狀態碼為 200協商緩存&#xff1a;每次都判斷一下&#xff0c;告訴是否需要找緩存&#xff0c;狀態碼為 304 默認強制緩存&#xff0c;不緩存首頁&#xff08;如果已經斷網&#xff0c;那這個頁面應該…

Python發送QQ郵件

使用Python的smtplib可以發送QQ郵件&#xff0c;代碼如下 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Headersender 111qq.com # 發送郵箱 receivers [222qq.com] # 接收郵箱 auth_code "abc" # 授權…

Dockerfile概念、鏡像原理、制作及案例講解

1.Docker鏡像原理 Linux文件操作系統講解 2.鏡像如何制作 3.Dockerfile概念 Docker網址&#xff1a;https://hub.docker.com 3.1 Dockerfile關鍵字 4.案例

【數據結構OJ題】鏈表分割

原題鏈接&#xff1a;https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId8&&tqId11004&rp2&ru/activity/oj&qru/ta/cracking-the-coding-interview/question-ranking 目錄 1. 題目描述 2. 思路分析 3. 代碼實現 1. 題目描述 2…

AMD卡啟動Stable Diffusion AI繪畫的方法

WindowsAMD安裝法 1.安裝python 3.10.6&#xff0c;在python官網上下載安裝程序&#xff0c;***重要*** 在安裝的第一個窗口下方勾選“將python添加到path”。 2.安裝git 3.WindowsAMD使用AUTOMATIC1111的directml這一個fork&#xff0c;在這個頁面的第一段&#xff1a;https:/…

題目:2614.對角線上的質數

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;2614. 對角線上的質數 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 遍歷對角線上的元素&#xff0c;返回最大的質數或 0 即可。 解題代碼&#xff1a; class Solution {public int dia…

e.target.value和 binding.value 區別

e.target.value 和 binding.value 都是在 Vue.js 中用于處理事件綁定時的值&#xff0c;但它們的使用場景和含義有所不同&#xff0c;分別用于普通的 DOM 事件和自定義指令。 e.target.value&#xff1a; 這是常用于原生 DOM 事件處理函數中的一個屬性&#xff0c;用于獲取事件…

爬蟲逆向實戰(十七)--某某丁簡歷登錄

一、數據接口分析 主頁地址&#xff1a;某某丁簡歷 1、抓包 通過抓包可以發現數據接口是submit 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個enPassword加密參數 請求頭是否加密&#xff1f; 通過查看請求頭可以發現有一個To…