Vue连接Docker环境下RabbitMQ进行消息读取

  • 首先,docker拉取rabbitmq镜像,这里拉取带有management的镜像,自带管理界面;

    docker pull rabbitmq:3.6.10-management
    
  • 创建rabbitmq容器,名字叫mq(这里需要注意,因为前端Vue使用Websocket来与建立连接,而Websocket需要使用到端口15674,所以,需要多加一个15674端口的映射);

    docker run --name mq -p 15672:15672  -p  5672:5672 -p 15674:15674 -d  \
    -e RABBITMQ_DEFAULT_USER=admin \
    -e RABBITMQ_DEFAULT_PASS=admin \
    rabbitmq:3.6.10-management
    
  • 使用 docker ps 查看运行的容器:
    在这里插入图片描述

  • 设置容器自启动命令 docker update --restart=always 容器名称,如下图:
    在这里插入图片描述

  • 使用如下命令进入到mq服务器中(5e6f13f9e8e2:为mq容器id):

    docker exec -it 5e6f13f9e8e2 /bin/bash
    
  • 然后执行如下命令安装需要的 stomp 插件:

    rabbitmq-plugins enable rabbitmq_web_stomp rabbitmq_stomp rabbitmq_web_stomp_examples
    
  • 执行如下命令查看插件列表,出现下面三个即可

     rabbitmq-plugins list
    

    在这里插入图片描述

  • 然后使用命令查看 5672、15672、15674三个端口是否启动成功:

    netstat -nlpt
    

    在这里插入图片描述

  • 之后在浏览器输入 <你的Linux地址>:15672 进入rabbitmq管理界面进行登录,我们在一开始指定的用户是 admin,密码也是admin,输入之后登录进入mq管理界面查看概述:
    在这里插入图片描述

  • 前端先安装stompjs库

    npm install stompjs
    
  • 这里补充一下vue中的几种订阅topic的写法(交换机和队列)

     /queue/queuename:使用默认转发器订阅/发布消息,默认由stomp自动创建一个持久化队列 
    
     /amq/queue/queuename:与/queue/queuename的区别在于队列不由stomp自动进行创建,队列不存在失败 
    
     /topic/routing_key:通过amq.topic转发器订阅/发布消息,订阅时默认创建一个临时队列,通过routing_key与topic进行绑定 
    
     /temp-queue/xxx:创建一个临时队列(只能在headers中的属性reply-to中使用),可用于发送消息后通过临时队列接收回复消息,接收通过client.onreceive 
    
     /exchange/exchangename/[routing_key]:通过转发器订阅/发布消息,转发器需要手动创建 
    
     client.subscribe(destination,callback,headers) :订阅消息 
    
     client.send(destination,headers,body):发布消息 
    
     client.unsubscribe(id):取消订阅,id为订阅时返回的编号 
    
     client.onreceive:默认接收回调从临时队列获取消息 
    
  • 编写前端Vue的代码进行连接通信,代码如下:

    import Stomp from "stompjs";
    // import SockJS from 'sockjs-client'
    export const IP = "x.108.x.33" // 自己的mq服务ip
    export const PORT = "15674"
    export const MQTT_SERVICE = 'ws://' + IP + ':' + PORT + '/ws' // mqtt服务地址
    export const MQTT_USERNAME = 'admin' // 连接用户名, todo: read from database
    export const MQTT_PASSWORD = 'admin' //  连接密码, todo: read from database
    export const VIRTUAL_HOST = '/' //  侦听器端口
    export default {
      data() {
        return {
          client: ''
        };
      },
      created() {
        this.connect();
      },
      methods: {
        // 消息队列获取
        connect() {
          // let ws = new SockJS("http://xx.108.xx.33:15674/stomp");
          let ws = new WebSocket(MQTT_SERVICE);
          this.client = Stomp.over(ws);
          //初始化连接
          const headers = {
            login: MQTT_USERNAME,
            passcode: MQTT_PASSWORD
          };
          //进行连接
          this.client.connect(headers.login, headers.passcode, this.onConnected, this.onFailed, VIRTUAL_HOST);
        },
        onConnected: function () {
          //订阅频道
          const topic = '/queue/simple_queue';
          this.client.subscribe(topic, this.responseCallback, this.onFailed);
        },
        onFailed: function (frame) {
          console.log("MQ Failed: " + frame);
          // this.$message.error('连接失败')
        },
        // 回传消息
        responseCallback: function (frame) {
          console.log("MQ msg=>" + frame.body);
          //接收消息处理
        },
        // 断开相应的连接
        close: function () {
          this.client.disconnect(function () {
            console.log("已退出账号");
          })
        }
      }
    }
    
  • 最后打开控制台输出如下信息就连接成功了:
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值