首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」

无公网IP,在外公网远程访问RabbitMQ服务「内网穿透」

作者头像
iOS Magician
发布于 2023-04-17 12:13:13
发布于 2023-04-17 12:13:13
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

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

前言

RabbitMQ是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容是message,下面介绍通过在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问。

1.安装erlang 语言

由于rabbitMQ是erlang语言实现的,所以我们需要安装erlang

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install erlang-nox

2.安装rabbitMQ

安装最新版rabbitMQ

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install rabbitmq-server

查看rabbitMQ状态,active(running)表示在线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl status rabbitmq-server

设置访问MQ用户名账号和密码,admin表示账号(可自定义),123456表示密码(可自定义)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo rabbitmqctl add_user admin 123456

设置上面admin用户的角色,administrator表示是最高管理员

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo rabbitmqctl set_user_tags admin administrator

设置admin角色权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

以上信息设置好后,我们往下走。

3. 内网穿透

接着我们使用cpolar穿透本地MQ服务,使得远程可以进行访问连接,cpolar支持http/https/tcp协议,不限制流量,操作简单,无需公网IP,也无需路由器

cpolar官网:https://www.cpolar.com/

3.1 安装cpolar内网穿透(支持一键自动安装脚本)

  • cpolar 安装(国内使用)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 或 cpolar短链接安装方式:(国外使用)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -sL https://git.io/cpolar | sudo bash
  • 查看版本号
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cpolar version
  • token认证

登录cpolar官网后台,点击左侧的验证,查看自己的认证token,之后将token贴在命令行里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cpolar authtoken xxxxxxx
  • 向系统添加服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl enable cpolar
  • 启动cpolar服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

点击创建

打开在线隧道列表,查看随机公网tcp地址,使用下面随机的tcp公网地址,即可远程连接MQ

4. 公网远程连接

maven坐标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>5.10.0</version>
		</dependency>

这里使用java 测试使用上面公网地址进行连接,编写发布者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       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();
                }
            }
        }

编写消费者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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官网后台,点击左侧的预留,选择保留的TCP地址。

  • 地区:选择China VIP
  • 描述:即备注,可自定义填写

点击保留

地址保留成功后,系统会生成相应的固定公网地址,将其复制下来

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

在浏览器上访问9200端口,登录cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到上面创建的隧道,点击右侧的编辑

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

  • 端口类型:修改为固定tcp端口
  • 预留的tcp地址:填写保留成功的地址

点击更新

隧道更新成功后,点击左侧仪表盘的状态在线隧道列表,找到需要编辑的隧道,可以看到公网地址已经更新成为了固定TCP地址。

更新好后,我们修改代码中的两个参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     	//cpolar公网地址,改为我们固定的地址
        factory.setHost("5.tcp.vip.cpolar.cn");
        //固定地址对应的端口号
        factory.setPort(13630);

然后我们重新启动消费者,再启动生产者,正常发布和消费消息表示成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Centos7 安装 Python3 及配置国内源、虚拟环境
安装 # 安装 python3 $ sudo yum install -y epel-release $ sudo yum install -y python3 # 升级 pip 为最新版本 $ sudo pip3 install pip -U 设置国内镜像源 # 查看当前源地址 $ pip config list | grep global.index-url # 设置 pip 为清华源 $ pip config set global.index-url https://pypi.tuna.tsin
叨叨软件测试
2021/06/16
4.3K0
pip安装更换镜像
使用pip来安装python包有时候安装起来会非常慢,因此需要换成国内的源来加速下载:
代码的路
2022/06/18
1.3K0
pip & conda 换源
在使用 pip 和 conda 命令安装包时,由于服务器在国外,往往会出现超时的问题,国内下载速度非常慢,体验并不友好。解决办法就是把源换成国内的,如清华、阿里、豆瓣。
EmoryHuang
2022/10/31
3.9K1
从黑暗走向光明:Python包安装进阶之路
想当初刚学习Python的时候,就会用书本里面自带的一些package,用sys,os也用得很开心。后来接触到biopython项目,发现原来Python有这么不同功能的包,简直琳琅满目。不过这也是我痛苦的开始,在服务器上装个包怎么那么费劲呢,缺这少那的。 为了一个包的安装,我得花多少时间啊,还能不能让人好好做科研了。 黑暗时代 最开始的时候是从源码开始安装,一般 python setup.py install就执行安装过程了,不过可怕的这些包之间的依赖关系。而且安装的时候,要选择安装目录。对于刚开始学习的
生信技能树
2018/03/08
1.4K0
从黑暗走向光明:Python包安装进阶之路
更换conda源和pip源「建议收藏」
conda下载pytorch巨慢 是因为国内镜像源不支持conda 但是最新发现清华源已经支持了, 需要额外添加pytorch的库,否则找不到
全栈程序员站长
2022/11/10
3.5K0
[开发工具]·pip conda 使用国内源加速
以前使用默认源,有时候下载速度会很慢,所以找了一些国内的pip,conda源,下载的时候可以加速,使用起来也很简单。
小宋是呢
2019/06/27
3.2K0
python 安装第三方包-安装失败(pycharm/ anaconda navigator)
安装/卸载第三包,注意对于windows用户请使用管理员身份打开命令端口,能避免各种莫名其妙的错误:
全栈程序员站长
2022/09/25
2.9K0
python 安装第三方包-安装失败(pycharm/ anaconda navigator)
Conda源_conda配置清华源
查看源路径:conda config –set show_channel_urls_yes
全栈程序员站长
2022/11/10
4.9K0
python pip 换源_python添加pip环境变量
2. 新建一个 pip 文件夹,在 pip 文件夹里面新建一个配置文件 pip.ini:
全栈程序员站长
2022/11/15
1.1K0
python pip 换源_python添加pip环境变量
软件测试|教你轻松解决pip安装下载超时问题
pip是我们最常用的Python第三方库安装工具,不管是什么库,我们只需要一条pip install命令就能安装,但是现在经常出现一些安装超时的问题,这是为什么呢?
霍格沃兹测试开发Muller老师
2023/02/12
1.5K0
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
要搞清楚什么是虚拟环境,首先要清楚Python的环境指的是什么。当我们在执行python test.py时,思考如下问题:
全栈程序员站长
2022/09/27
57.8K0
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
pip安装'torch'出现PackageNotFoundError报错解决办法
进入根用户方法:https://mp.weixin.qq.com/s/RT_Yw-NB7LS1f1P59yPrbg
代码的路
2022/07/26
1.3K0
Mac下pycharm如何安装pytorch「建议收藏」
首先提及,下面的命令,我都是直接在macos上的pycharm中的terminal执行的
全栈程序员站长
2022/09/27
1.2K0
Mac下pycharm如何安装pytorch「建议收藏」
conda创建虚拟环境怎么删除(anaconda离线创建虚拟环境)
在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。
全栈程序员站长
2022/07/31
5.4K0
使用默认pypi源出现连接超时的解决办法
最近博主在做一个项目的时候,直接运行pip install django命令,出现这种情况:
啃饼思录
2018/10/15
18.5K0
求你了,别再用 pip 那乌龟的速度去安装库了!
学习 Python 的话,仅掌握标准库是远不够的,有很多好用的第三方库我们也需要用到的,比如,由鼎鼎大名的 K 神开发的爬虫必不可少的 requests 库,一般都是必装的库吧。安装第三方库当然还是用 pip 命令安装最方便了。
小F
2020/12/02
5290
求你了,别再用 pip 那乌龟的速度去安装库了!
Win10下的 Anaconda的安装,Navigator配置虚拟环境,安装清华镜像,安装包(whl)
Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以在Linux、macOS以及Windows系统中搭建环境并使用,其编写的代码在不同平台上运行时,几乎不需要做较大的改动,使用者无不受益于它的便捷性。
学到老
2022/05/07
1.4K0
Win10下的 Anaconda的安装,Navigator配置虚拟环境,安装清华镜像,安装包(whl)
conda常用命令:安装,更新,创建,激活,关闭,查看,卸载,删除,清理,重命名,换源,问题
直接去anaconda官网下载安装文件即可,具体网站自行搜索。 官网提供linux版本,windows版本,mac版本。 同时提供Anaconda完整版和miniconda最小版(无软件界面的,仅支持命令行执行),新手推荐使用Anaconda版,熟悉之后推荐改用miniconda版,占用存储空间小,使用起来感受一样。
全栈程序员站长
2022/07/25
5.7K0
conda常用命令:安装,更新,创建,激活,关闭,查看,卸载,删除,清理,重命名,换源,问题
Tensorflow
##################################################################
Dean0731
2020/05/08
7960
Python 安装库的方法及解决pip 安装时速度缓慢的方法
pip是python内置的非常好用的下载工具,基本可以下载全部的python库。 pip 是 Python 库管理工具,该工具提供了对Python 库的查找、下载、安装、卸载的功能。
风骨散人Chiam
2020/10/28
1.3K0
推荐阅读
相关推荐
Centos7 安装 Python3 及配置国内源、虚拟环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验