如何在Ubuntu系统部署RabbitMQ服务器并公网访问【内网穿透】

news2024/11/27 21:04:07

文章目录

  • 前言
  • 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](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) {
                @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。

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

转载自cpolar内网穿透的文章:无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 中的make/makefile

一&#xff1a;背景 make是一个命令工具&#xff0c;是一个解释makefifile中指令的命令工具&#xff0c;一般来说&#xff0c;大多数的IDE都有这个命令&#xff0c;比如&#xff1a;Delphi的make&#xff0c;Visual C的nmake&#xff0c;Linux下GNU的make。可见&#xff0c;mak…

Doxygen在vs code配置

找到这个 就在这里面配置&#xff0c;如果要在原有的下面添加别忘了后面加个逗号&#xff0c;我在他前面加的所以我在上面加了个 //基础设置 “doxdocgen.c.triggerSequence”: “/", “doxdocgen.c.firstLine”: "/", “doxdocgen.c.commentPrefix”: &quo…

瑞芯微:基于RK3568的ocr识别

光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;是指对文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的过程。亦即将图像中的文字进行识别&#xff0c;并以文本的形式返回。OCR的应用场景 卡片证件识别类&#xff1a;大陆、港澳…

软件测试进大厂,拿高薪,怎么做?看这里!

有些同学大学专业不对口&#xff0c;但有想进大厂想拿高薪心&#xff0c;只要你有想法&#xff0c;那就一定有实现的方法。 俗话说&#xff1a;“世间无难事&#xff0c;只怕有心人”。仔细思索一下&#xff0c;哪家大厂能缺软件测试这一重要职位。相对大学所学专业而言&#…

两数之和 三数之和【基础算法精讲 01】

灵神算法基础算法精讲[01] : 两数之和 三数之和【基础算法精讲 01】_哔哩哔哩_bilibili 167.两数之和 II - 输入有序数组 链接 : 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路 : 采用双指针的思想&#xff0c;因为给出的数组是有序的&…

Delft3D水动力与泥沙运动模拟实践技术应用

水体中泥沙运动是关系到防洪&#xff0c;调水等方面的重要问题&#xff0c;也是水利和水环境领域科研热点之一。水利数值模型&#xff0c;在环境影响评价、防洪规划等方面也有着广泛的应用。荷兰Delft研究所开发的Delft3D模型是世界上最先进的水动力之一&#xff0c;能够运用于…

5款精挑细选的软件,助你事半功倍

​ 在工作的时候&#xff0c;大家都喜欢通过一些好用有效率的工具&#xff0c;来让工作更加快速地完成&#xff0c;今天给大家带来的这5款软件&#xff0c;更是一款比一款还要惊喜&#xff01; 1.在线文件转换——Aconvert ​ Aconvert 是一款在线文件转换服务&#xff0c;它…

AVR 单片机 调试环境 JTAG MKII

注意 驱动 的厂家: 如果驱动备改变为其他厂家的驱动 就与 AVR Studio7不兼容 保证驱动选择正确是 能够使用硬件调试的关键 如果驱动不对&#xff0c;使用 USB驱动修改工具 修改 比如 UsbDriverTool.exe

“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明&#xff1a;对于作者的原创代码&#xff0c;禁止转售倒卖&#xff0c;违者必究&#xff01; 本期文章思路来自振动测试与诊断期刊的一篇三高论文&#xff0c;点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g 文章摘要如下&#xff1a; 针对风机滚动轴…

alist windows 命令行版本下载、使用

下载 下载地址 https://github.com/alist-org/alist/releases 文件下载链接 &#xff0c;直接点击就能下载https://github.com/alist-org/alist/releases/download/v3.27.0/alist-windows-arm64.zip 安装 输入cmd&#xff0c;按enter键&#xff0c;会调出cmd命令行 输入 alis…

内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系&#xff0c;较为详细的介绍了作为在校大学生对于虚拟内存的理解。 内存管理 引入 RAM&#xff08;内存&#xff09;是计算机中非常重要的资源&#xff0c;由于造价的昂贵&…

前端对接阿里oss保姆级教程(第二章使用武器)

1.在前端项目下载ali-oss yarn add ali-oss 2.编写上传方法 const OSS require(ali-oss)const client new OSS({// 填写Bucket所在地域。我的杭州的&#xff0c;Region填写为oss-cn-hangzhou。region: oss-cn-hangzhou,//填写组件的密钥accessKeyId: ,accessKeySecret: ,/…

小试GraphQL

之前做的需求&#xff0c;基本都是REST风格&#xff0c;以github提供的api为例&#xff0c;比较二者差异。试用GraphQL&#xff0c;找寻其独到之处 REST REST[1] 一个URI代表一种资源 通过HTTP动词对资源进行操作 以创建一个仓库[2]为例 GET[3], PATCH[4]和 DELETE[5]类似 Gra…

〔023〕Stable Diffusion 之 界面主题 篇

✨ 目录 🎈 系统内置主题🎈 kitchen Theme 主题🎈 Catppuccin Theme 主题🎈 Cozy Nest 主题🎈 系统内置主题 可以通过命令行修改主题,在 webui-user.bat 文件中 set COMMANDLINE_ARGS 参数后面添加 --theme dark 来设置深色主题当然,系统设置里面也自带了很多的主题…

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹

VS2015 设置工程目录不保存 .sdf或.db 文件、 Ipch 文件夹 sdf或db文件、Ipch文件夹均较大&#xff0c;编译几次就可以达到几十兆。 为了便于工程保持&#xff0c;可以设置这些文件保存于工程之外&#xff0c;但又不影响工程的正常运行。 &#xff08;PS&#xff1a;这些文件不…

家族小程序开发方案

家族小程序的开发需要考虑到家族成员之间的沟通和互动需求&#xff0c;以及家族文化传承和传承方式等因素。以下是一些开发家族小程序时需要考虑的方面&#xff1a; 家族文化传承&#xff1a;家族小程序需要考虑到家族文化传承的需求&#xff0c;包括家族历史、家族文化、家…

C++真的是 C加加

&#x1f4dd;个人主页&#xff1a;夏目浅石. &#x1f4cc;博客专栏&#xff1a;C的故事 &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言Ⅰ. 函数重载0x00 重载规则0x01 函数重载的原理名字修饰 Ⅱ. 引用0x00 引用的概念0x01 引用和指针区分0x03 引用的本质0x04…

【lesson8】冯诺依曼体系的介绍

文章目录 冯诺依曼体系是什么&#xff1f;为什么要有存储器&#xff1f;怎么实现数据传输的&#xff1f; 冯诺依曼体系是什么&#xff1f; 冯诺依曼体系是一种计算机体系结构&#xff0c;是现代计算机的基础被广泛应用。 如图所示&#xff1a; 输入设备&#xff1a;键盘&…

企业直播如何实现多画面多场景切换?

企业直播如何实现多画面多场景切换&#xff1f; 应用场景 主要应用于&#xff1a;企业的会议直播、小型会务直播、异地讲师培训授课&#xff0c;实现较低成本的导播台场景切换效果&#xff08;阿酷TONY注&#xff0c;比不上硬件导播台&#xff0c;但整体还可以&#xff0c;能…

快手商品详情数据API接口【关键词搜索商品列表数据】APP端商品详情数据

快手商品API接口是快手电商平台为开发者提供的一组接口&#xff0c;允许开发者通过程序代码访问快手电商平台的商品数据&#xff0c;实现商品信息的获取等操作。以下是快手商品API接口的一些常用功能&#xff1a; 获取商品列表&#xff1a;通过该接口可以获取店铺或分类下的商…