RabbitMQ
  l4BesvSMyBbJ 2023年11月02日 30 0

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

RabbitMQ_TCP

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

RabbitMQ_自定义_02

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

sudo rabbitmqctl add_user admin 123456

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

sudo rabbitmqctl set_user_tags admin administrator 1

设置admin角色权限

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

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

  1. 内网穿透 接着我们使用cpolar穿透本地MQ服务,使得远程可以进行访问连接,cpolar支持http/https/tcp协议,不限制流量,操作简单,无需公网IP,也无需路由器。 3.1 安装cpolar内网穿透(支持一键自动安装脚本) cpolar 安装(国内使用) curl -L 公网远程连接 maven坐标

com.rabbitmq amqp-client 5.10.0

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();
            }
        }
    }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 编写消费者

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();
    }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 先启动消费者,然后启动发布者,然后消费者控制台输出消费者发送的消息表示成功.我们实现了远程访问MQ。

5.固定公网TCP地址 由于以上创建的隧道使用的是随机地址隧道,地址会在24小时内变化,为了使连接更加稳定,我们还需要固定tcp地址。

5.1 保留一个固定的公网TCP端口地址 登录cpolar官网后台,点击左侧的预留,选择保留的TCP地址。

地区:选择China VIP 描述:即备注,可自定义填写 点击保留

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

5.2 配置固定公网TCP端口地址 在浏览器上访问9200端口,登录cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到上面创建的隧道,点击右侧的编辑

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

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

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

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

//cpolar公网地址,改为我们固定的地址
    factory.setHost("5.tcp.vip.cpolar.cn");
    //固定地址对应的端口号
    factory.setPort(13630);

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Linux 基础命令 下一篇: Apache网站优化
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读