SpringBoot 实现WebSocket页面消息推送及Redis 发布订阅和队列功能

项目简介:采用SpringBoot开发项目实现大屏数据展示功能,轻量级处理额外需求业务。基于Redis服务发布订阅功能,实现系统有新数据的时候主动推送数据到大屏的WebSocket监听页面进行展示。队列的消费需要提供接口这个方式不够友好,发布订阅只需要在另一个服务器上同样部署一个springboot开发的应用并订阅相同的主题即可(队列功能适合同一应用环境下,引用项目打包后的jar包进行开发即可)。

注:具体的推送内容是什么,逻辑可以自己拿来实现!

目录

WebSocket服务

项目相关测试

WebSocket服务代理转发

注意事项


WebSocket服务

WebSocket具体业务消息处理如下:

  /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        boolean success=false;
        logger.info("收到来自窗口" + uuid + "的信息:" + message);
        // 解析页面主动发送参数
        Map<String,Object> param=null;
        try {
            param=JSONUtil.getObjectFromJson(message,Map.class);
        } catch (IOException e) {
            sendFeedbackMessage(0,"指令参数解析错误",uuid);
            logger.error("参数格式错误:"+e.getMessage());
            e.printStackTrace();
            return ;
        }

        try {
            //解析参数服务类型
            String service= (String) param.get("service");
            if(WebSocketEnum.STATISTICS_USER.getValue().equals(service)){
                // 做相应的设备用户统计数据处理

                success=true;
            }else  if(WebSocketEnum.STATISTICS_EVENTS.getValue().equals(service)){
                // 做相应的事件周期及列表统计数据处理

                success=true;
            }
        } catch (Exception e) {
            logger.error("参数解析成功,但发生了如下错误:"+e.getMessage());
            e.printStackTrace();
        }finally {
            if(success){
                sendFeedbackMessage(1,"指令发送成功",uuid);
            }else{
                sendFeedbackMessage(0,"指令发送失败,请核对参数是否正确",uuid);
            }
        }
    }

项目相关测试

 Github项目地址:

https://github.com/open-micro-services/springcloud/tree/master/sc-demo-projects/dp-websocket

WebSocket访问测试:

http://192.168.1.111:8090/websocket

 Redis发布订阅消息:

http://192.168.1.111:8090/pubsub/userChannel/%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF

http://192.168.1.111:8090/pubsub/eventChannel/%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF

Redis发布队列消息:

http://192.168.1.111:8090/redismq/publish/%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF

http://192.168.1.111:8090/redismq/publish/channel/%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF

效果图如下:

Redis发布订阅和队列:

服务进程 :

WebSocket服务代理转发

通过host和port参数代理到目标WebSocket服务地址(这样不需要修改配置):

注意事项

websocket中通过@Autowired注入@Service类失败处理:

  /**
     * Spring只注入一次,所以建立连接的地方不会再次注入此对象
     */
    private static RedisService redisService;

    @Autowired
    public  void setRedisService(RedisService redisService) {
        WebSocketServer.redisService = redisService;
    }

可参考阅读:

http://javascript.ruanyifeng.com/htmlapi/websocket.html

https://blog.csdn.net/moshowgame/article/details/80275084

https://blog.csdn.net/moshowgame/article/details/83024867

https://blog.csdn.net/moshowgame/article/details/83663018

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值