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