npm stomp.js 的消息断连报警

stomp.js的新版本是可以支持MQ断连后,自动重连,但是如果是直接物理断网了,那久无论如何都没有办法重连,为了不影响业务,可以实现一个MQ断连后,重连三次,然后还是连不上的话,就启动告警,让业务人员注意。

代码如下:

定义一个告警的audio控件,让它隐藏,最好是放在页面一直能访问的地方,头部,脚部的位置。要注意,如果要引用assets里面的多媒体文件,要使用动态引入的方式,不然没法引入成功。

复制代码
<template> 
<audio controls="controls" hidden :src="getAudioUrl()"  id="alertAudio" ></audio>
</template>

<script>
methods:{
    getAudioUrl(name){
        return new URL(`../../assets/audio.mp3}`, import.meta.url).href
    },
}
</script>

在MQ监听器

复制代码
import { Client } from '@stomp/stompjs';
//计数器
const errorNum = ref(0);
//播放的flag
const playFlag = ref(true)
//消息框
const elMessageRef = ref(null);
const clients = new Client({
   
    brokerURL: 'ws://0.0.0.1:1111', 
    connectHeaders: {
      login: 'admin123',
      passcode: 'admin123',
    },
    debug: function (str) {
       console.log(str);
    },
    reconnectDelay: 1000,
    heartbeatIncoming: 2000,
    heartbeatOutgoing: 2000,
});

clients.onConnect = function (frame) {
     const subscription = clients.subscribe('/topic/aa', consumerCallback); 
     let alertAudio = document.getElementById("Audio");
      alertAudio.pause();
      // 关闭告警消息框,使用的是elmessage.close()函数。
      elMessageRef.value.close();
      elMessageRef.value = null;
  };

clients.onWebSocketClose = function(frame){
  errorNum.value += 1; 
  if(errorNum.value== 3 && playFlag.value == true){
    elMessageRef.value = showErrorMessage();
    playSound();
    errorNum.value = 0
  }
};
// 让告警的声音响起来,
function playSound(){
  let alertAudio = document.getElementById("Audio");
  if(playFlag.value){
    alertAudio.play();
//让告警的声音一直循环播放
    alertAudio.addEventListener('ended', () => {
      alertAudio.currentTime = 0;
      alertAudio.play();
      });
  }else{
    alertAudio.pause();
  }
}

// 显示告警信息框
function showErrorMessage(){
 let msg =  ElMessage({
        showClose: true,
        duration:0,
        message: 'MQ断开了,请注意',
        type: 'error',
        onClose:()=>{
          elMessageRef.value = null;
          let alertAudio = document.getElementById("Audio");
          alertAudio.pause();
          playFlag.value = true;
        }
      });
      return msg
}

onConnect 函数就是连接成功,那就需要去让警告声音自动关闭。调用alertAudio.pause();并且将告警框销毁,elMessageRef.value.close()。

onWebSocketClose函数就是监听websocket是否关闭,如果关闭,就去开始计数,然后调用警告声音和弹框。

在弹框这里,需要去让弹框不自动消失,而是触发关闭onclose函数,关闭弹框的时候,也就关闭告警的声音。

相关推荐
lixzest16 分钟前
C++上位机软件开发入门深度学习
开发语言·c++·深度学习
困惑阿三24 分钟前
2025 前端技术全景图:从“夯”到“拉”排行榜
前端·javascript·程序人生·react.js·vue·学习方法
苏瞳儿29 分钟前
vue2与vue3的区别
前端·javascript·vue.js
于越海31 分钟前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
代码方舟36 分钟前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
wuk99842 分钟前
基于MATLAB实现栅格地图全覆盖移动路径规划
开发语言·matlab
幽络源小助理1 小时前
PHP虚拟商品自动发卡系统源码 – 支持文章付费阅读与自动发货
开发语言·php
故事不长丨1 小时前
C#集合:解锁高效数据管理的秘密武器
开发语言·windows·c#·wpf·集合·winfrom·字典
superman超哥1 小时前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制
豆沙沙包?2 小时前
2026年--Lc329-735. 小行星碰撞(栈)--java版
java·开发语言