內網穿透-外遠程連接中的RabbitMQ服務

文章目錄

  • 前言
  • 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/40723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40723.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40723.shtml

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

相關文章

Linux:shell腳本:基礎使用(4)《正則表達式-grep工具》

正則表達式定義&#xff1a; 使用單個字符串來描述&#xff0c;匹配一系列符合某個句法規則的字符串 正則表達式的組成&#xff1a; 普通字符串: 大小寫字母&#xff0c;數字&#xff0c;標點符號及一些其他符號 元字符&#xff1a;在正則表達式中具有特殊意義的專用字符 正則表…

python中__main__的解釋

源自于&#xff1a;https://zhuanlan.zhihu.com/p/340997807 Python程序運行時是從模塊頂行開始&#xff0c;最頂層&#xff08;沒有被縮進&#xff09;的代碼都會被執行&#xff0c;所以Python中并不需要一個統一的main()作為程序的入口。 __name__是Python的內置變量&#…

藍橋杯嵌入式省一教程:(三)按鍵掃描與定時器中斷

在第一講中曾經提到&#xff0c;GPIO有輸入輸出兩種模式。在點亮LED時&#xff0c;我們已經使用了GPIO輸出模式&#xff0c;在按鍵識別中&#xff0c;我們將要使用GPIO輸入模式。首先來看看按鍵的電路原理圖&#xff08;下圖在選手資源數據包——CT117E-M4產品手冊中&#xff0…

Android CCodec (二十) CCodec Native服務實現分析

1、C2解碼服務registerAsService注冊流程 google實現CCodec的vendor默認解碼服務代碼路徑是在frameworks/av/media/codec2/hidl/services/vendor.cpp中,而其注冊的是HIDL服務,本文就對HIDL服務注冊做簡要分析。首先看下vendor.cpp中的代碼注冊流程。 int main(int /* argc *…

高等數學教材重難點題型總結(三)微分中值定理和導數的應用

第三章&#xff0c;微分中值定理的證明題等&#xff0c;非常重要&#xff0c;需要牢牢掌握 1.證明中值定理對某函數在給定區間上的正確性 2.與中值定理有關的證明題 3.微分中值定理應用于求證不等式 4.洛必達法則求極限 5.洛必達的經典錯誤反例 6.按某項實現多項式冪展開 7.求帶…

以 Java NIO 的角度理解 Netty

文章目錄 前言Java NIO 工作原理Selector 的創建ServerSocketChannel 的創建ServerSocketChannel 注冊 Selector對事件的處理總結 前言 上篇文章《Netty 入門指南》主要涵蓋了 Netty 的入門知識&#xff0c;包括 Netty 的發展歷程、核心功能與組件&#xff0c;并且通過實例演示…

rabbitmq的發布確認

生產者將信道設置成 confirm 模式&#xff0c;一旦信道進入 confirm 模式&#xff0c; 所有在該信道上面發布的 消息都將會被指派一個唯一的 ID (從 1 開始)&#xff0c;一旦消息被投遞到所有匹配的隊列之后&#xff0c;broker 就會發送一個確認給生產者(包含消息的唯一 ID)&…

AI巨浪下,數據技術如何驅動智能未來?

引言 數據技術是大數據時代的核心驅動力&#xff0c;也是推動各行各業數字化轉型和智能化升級的關鍵因素。隨著云計算、人工智能、區塊鏈等新興技術的不斷發展和融合&#xff0c;數據技術也呈現出多模態、混合處理、自動化管理等新的趨勢和特點。 8 月 19 日&#xff08;周六&…

域名和ip的關系

域名和ip的關系 一&#xff1a;什么是域名 域名&#xff0c;簡稱域名、網域&#xff0c;是由一串用點分隔的名字組成的上某一臺計算機或計算機組的名稱&#xff0c;用于在數據傳輸時標識 計算機的電子方位(有時也指地理位置)。網域名稱系統&#xff0c;有時也簡稱為域名…

【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】

【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】 文章目錄 【寶藏系列】嵌入式 C 語言代碼優化技巧【超詳細版】前言整形數除法和取余數合并除法和取余數通過2的冪次進行除法和取余數取模的一種替代方法使用數組下標全局變量使用別名變量的生命周期分割變量類型局部變量指針…

Centos下的tcpdump抓包用法

先查一下是否安裝, 無的話裝一下 (版本低的用yum install) : rpm -qa tcpdump dnf install tcpdump 1. 列出能抓包的網卡: tcpdump -D | --list-interfaces 2. 在eth0網卡上抓來源為10.1.1.1 的包, 只抓一個包 (-n這里是不解析DNS) : tcpdump -i eth0 -n src 10.1.1.1 -…

STM32 F103C8T6學習筆記3:串口配置—串口收發—自定義Printf函數

今日學習使用STM32 C8T6的串口&#xff0c;我們在經過學習筆記2的總結歸納可知&#xff0c;STM32 C8T6最小系統板上有三路串口&#xff0c;如下圖&#xff1a; 今日我們就著手學習如何配置開通這些串口進行收發&#xff0c;這里不講串口通信概念與基礎&#xff0c;可以自行網上…

一文讀懂HTML

文章目錄 HTML的歷史HTML的作用HTML的基本語言 HTML的歷史 HTML&#xff08;HyperText Markup Language&#xff09;的歷史可以追溯到20世紀90年代早期&#xff0c;它是互聯網發展的重要里程碑之一。以下是HTML的歷史概述&#xff1a; 早期階段&#xff08;1980年代末 - 1990年…

FLatten Transformer 簡化版Transformer

今天在找論文時&#xff0c;看到一篇比較新奇的論文&#xff0c;在這里跟大家分享一下&#xff0c;希望可以給一些人提供一些思路。雖然現在Transformer 比較火&#xff0c;在分割上面也應用的比較多&#xff0c;但是我一直不喜歡用&#xff0c;其中一個原因是結構太復雜了&…

golang官方限流器rate包實踐

日常開發中&#xff0c;對于某些接口有請求頻率的限制。比如登錄的接口、發送短信的接口、秒殺商品的接口等等。 官方的golang.org/x/time/rate包中實現了令牌桶的算法。 封裝限流器可以將ip、手機號這種的作為限流器組的標識。 接下來就是實例化限流器和獲取令牌函數的實現…

C++:模擬實現list及迭代器類模板優化方法

文章目錄 迭代器模擬實現 本篇模擬實現簡單的list和一些其他注意的點 迭代器 如下所示是利用拷貝構造將一個鏈表中的數據挪動到另外一個鏈表中&#xff0c;構造兩個相同的鏈表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

運動路徑規劃,ROS發布期望運動軌跡

目錄 一、Python實現&#xff08;推薦方法&#xff09; 1.1代碼cubic_spline_path.py 1.2使用方法 二、C實現 參考博客 想讓機器人/智能車無人駕駛&#xff0c;要有期望路徑&#xff0c;最簡單的是一條直線&#xff0c;或者是一條光滑曲線。 生成路徑的方法有兩種&#xf…

【網絡編程(二)】NIO快速入門

NIO Java NIO 三大核心組件 Buffer&#xff08;緩沖區&#xff09;&#xff1a;每個客戶端連接都會對應一個Buffer&#xff0c;讀寫數據通過緩沖區讀寫。Channel&#xff08;通道&#xff09;&#xff1a;每個channel用于連接Buffer和Selector&#xff0c;通道可以進行雙向讀…

Linux下C++開發

Linux下C開發 Linux 系統介紹 簡介 Linux屬于多用戶多任務操作系統&#xff0c;而Windows屬于單用戶多任務操作系統Linux一切皆文件目錄結構 bin 存儲二進制可執行文件dev 存放的是外接設備&#xff0c;例如磁盤&#xff0c;光盤等。在其中的外接設備是不能直接被使用的&…

Redis數據庫的可視化工具AnotherRedisDesktopManager使用+抖音直播小玩法實踐

一、它是什么 Another Redis DeskTop Manager 是一個開源項目&#xff0c;提供了以可視化的方式管理 Redis 的功能&#xff0c;可供免費下載安裝&#xff0c;也可以在此基礎上進行二次開發&#xff0c;主要特點有&#xff1a; 支持 Windows 平臺和 MacOS 平臺 支持查詢 Key、…