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("已退出账号");
          })
        }
      }
    }
    
  • 最后打开控制台输出如下信息就连接成功了:
    在这里插入图片描述

Vue.js 是一个用于构建用户界面的 JavaScript 框架,它通常用于构建单页面应用程序(SPA)。Vue.js本身并不直接与外部消息队列(RabbitMQ)进行连接和订阅消息。但是你可以使用第三方库(例如amqp.js)来连接和订阅RabbitMQ消息。 以下是一个简单的示例,演示如何在Vue.js应用程序中使用amqp.js库连接RabbitMQ并订阅消息。 1. 首先,安装amqp.js库。可以使用npm来安装它: ``` npm install amqp-ts ``` 2. 在Vue.js应用程序的某个组件中,引入amqp.js库。例如,在Vue组件的`<script>`标签中添加以下代码: ```javascript import {Connection} from 'amqp-ts'; // 创建与RabbitMQ服务器的连接 const connection = new Connection('amqp://localhost:5672'); // 创建与指定队列的通信 const queue = connection.declareQueue('myQueueName'); // 订阅消息 queue.activateConsumer((message) => { console.log('Received message:', message.getContent()); }, {noAck: true}); ``` 这个代码片段首先创建一个与RabbitMQ服务器的连接,然后声明一个要与之通信的队列,最后使用`activateConsumer`方法订阅消息。在收到消息时,我们将使用回调函数来处理消息。 3. 如果需要在Vue组件的生命周期钩子函数中使用这些逻辑,可以将上述代码放在`created`或`mounted`钩子函数中: ```javascript export default { created() { // 上述代码放在这里 } } ``` 这样,当组件创建时或挂载时,将会连接RabbitMQ并开始订阅消息。收到的消息将在控制台中打印出来(可以根据需求进行处理)。 请注意,此示例仅仅是一个概念示例,实际应用中需要根据具体情况进行适当的配置和错误处理。另外,为了在Vue.js应用程序中连接RabbitMQ,需要在运行应用程序的机器上安装并运行RabbitMQ服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值