若依+websocket+springboot+elementui 实现消息推送

10 篇文章 0 订阅
2 篇文章 0 订阅

场景

服务端有定时任务,会监测预警的一些事件,当定时任务监测到预警产生的时候,需要向WEB端推送预警的内容,实现效果如下图所示:

实现思路

我使用的框架后端是若依架构定时任务websocket通讯,前端采用elementui的Notification 通知进行推送。

具体实现-后端

一、定时任务,定时任务主要是实现了访问数据库,当满足条件的时候,就进行推送,

1.如何标记该类是定时任务,只需要增加@Component("XXX")就可以了

2.在若依的系统监测-定时任务开启就可以了

        具体增加定时任务可以参考若依官网:后台手册 | RuoYi

/**
 * 定时任务调度-预警管理测试
 *
 */
@Component("warntask")
public class WarnTask
{

    @Autowired
    private IWarnTaskService warnTaskService;

    /**
     * 定时任务预警管理
     */
    public void warnTask(){
        warnTaskService.warnTask();
    }

}

3.在WarnTaskServiceImpl 调用了WebSocketUsers的推送方法,senWarnHistory是推送的实体内容,也可以自己需要推送文本(websocket代码具体看下一节介绍)

// 向客户端的所有用户推送消息
                            //WebSocketUsers.sendMessageToUsersByText("aaaaaaaaaaaaaaaaaaaaaa");
                            WebSocketUsers.sendMessageToUsersByText(JSON.toJSONString(senWarnHistory));

二、集成websocket实现实时通信

WebSocket是一种通信协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。

1、ruoyi-framework/pom.xml文件添加websocket依赖。

<!-- SpringBoot Websocket -->
<dependency>  
   <groupId>org.springframework.boot</groupId>  
   <artifactId>spring-boot-starter-websocket</artifactId>  
</dependency>

2、配置匿名访问(可选)

// 如果需要不登录也可以访问,需要在`ShiroConfig.java`中设置匿名访问
filterChainDefinitionMap.put("/websocket/**", "anon");

3、下载插件相关包和代码实现覆盖到工程中

插件相关包和代码实现ruoyi/集成websocket实现实时通信.zip

链接:  https://pan.baidu.com/s/13JVC9jm-Dp9PfHdDDylLCQ

提取码: y9jt

4、测试验证

如果要测试验证可以把websocket.html内容复制到login.html,点击连接发送消息测试返回结果。

5.其中WebSocketUserssendMessageToUsersByText可以群发消息,前端接收到消息,根据推送消息展示出Notification通知框

三、前端webSocket的调用,在Navbar.vue调用

  element ui 的Notification 通知具体的参数设置,可以参考官网:

   Element - The world's most popular Vue UI framework

import { Notification } from "element-ui";
import moment from "moment";
import Vue from "vue";
import Router from "vue-router";
import {listTask} from "@/api/device/warnhistory"; 

 mounted() {
    // vue 3.0以上跳转多次报错的解决方法
    const originalPush = Router.prototype.push;
    Router.prototype.push = function push(location) {
      return originalPush.call(this, location).catch((err) => err);
    };

    const wsuri = this.url;
    this.ws = new WebSocket(wsuri);
    const self = this;
    this.ws.onopen = function (event) {
      //self.text_content = self.text_content + "已经打开连接!" + "\n";
    };
    this.ws.onmessage = function (event) {
      //self.text_content = event.data + "\n";
      // 判断是推动预警消息的时候
      if (event.data.indexOf("warnId") > -1) {
        var messageBody = JSON.parse(event.data);
        // 预警消息包含预警id的时候
        if (messageBody.warnId != undefined) {
          Notification.error({
            title: messageBody.caseName + "(" + messageBody.menuName + ")",
            dangerouslyUseHTMLString: true,
            message:
              "<strong>时间:" +
              moment(new Date(messageBody.warnDate)).format(
                "YYYY-MM-DD HH:mm:ss"
              ) +
              " " +
              messageBody.warnMsg +
              "  <br/> <i> 处理方案:" +
              messageBody.caseWarndesc +
              "</i> </strong>",
            duration: 0,
            position: "bottom-right",
            onClick: function () {
              self.warnDetailByWarnid(messageBody.warnId); //自定义回调,message为传的参数
              // 点击跳转的页面
            },
          });
         
        }
      }
    };
    this.ws.onclose = function (event) {
      self.text_content = self.text_content + "已经关闭连接!" + "\n";
    };
  },

methods: {
 warnDetailByWarnid(warnid) {
      // 跳转预警详情页面
      this.$router.push({
        path: "/XXX/XXX",
        query: {
          warnid: warnid,
        },
      });
    },
}

这样就完成了当定时任务监测到预警产生的时候,需要向WEB端推送预警的内容

--------未经允许禁止任何形式的转载---------------------------------------------------------------------------------

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
RuoYi-plus是一个基于RuoYi升级的springcloud版本管理系统。软件由SMP多商户后台管理系统+API后端接口组成,项目支持cms内容管理和商城业务,提供单机版服务、微服务体系双向选择,微服务集成分布式事务解决方案seata,框架基于SpringBoot2.x,springcloudG版本。 RuoYi-plus项目介绍 项目核心: 多商户权限系统+商城平台+CMS内容管理+微服务API系统 架构技术: 基于SpringBoot2.x, springcloud G版本eureka、hystrix、feign、config、gateway微服务架构体系的全新版本,集成分布式事务解决方案seata,集成redis、quartz、tk.mybatis、lombok、各种设计模式等。 项目优势: 架构更清晰、技术更前沿、代码更整洁、页面更美观、学习商用均可。可用于OA系统、 CRM系统、 PDM系统等二次开发,微服务架构学习,非常适用于公司管理平台旧版本升级、新平台搭建快速整合、同时提供API接口服务(供APP、微端、h5等使用)。 RuoYi-plus内置功能 管理平台基础功能 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7、参数管理:对系统动态配置常用参数。 8、通知公告:系统通知公告信息发布维护。 9、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10、登录日志:系统登录日志记录查询包含登录异常。 11、在线用户:当前系统中活跃用户状态监控。 12、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13、代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14、系统接口:根据业务代码自动生成相关的api接口文档。 15、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16、在线构建器:拖动表单元素生成相应的HTML代码。 17、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 商城业务基础功能 1、商户管理:多商户系统核心业务,商户管理对应权限数据。 2、类别管理:商品类别配置,为商品区分类别。 3、商品管理:每个商户下的商品信息。 CMS内容基础功能 1、文章类别管理:文章列表信息,为文章区分不同类别。 2、文章信息管理:文章具体信息,直接生成文章html页面。 3、素材类别管理:为素材提供类别以区分不同业务的素材图片/视频。 4、素材信息管理:文章信息的素材图片管理。 API接口基础功能 1、业务模块:接收网关gateWay转发请求,api微服务结构处理具体业务,解决分布式事务。 2、订单模块:订单相关业务处理。 3、商品模块:商品相关业务处理。 商用须知 本项目遵循MIT协议,无需授权,留言备注公司信息即可。 演示地址账号:tecom  密码:123456

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值