背景
公司每上线一次打点需求,均需要数据组看下数据,这样效率特别低,数组组在被占用的时间里面,只能乖乖的配合打点测试,监控日志服务器的输出或者卡夫卡消息,而日志服务器和卡夫卡的机器是数据组的,涉及到权限,没法给其他部门或者产品用,因此急需一个kafka可视化界面来测试打点消息。
这个可视化界面应该包含:
1、选择所需要的 topic
2、订阅自己关注的关键字 比如新的版本号等
3、要能实时的展示
基于这几点需求,可以考虑使用 Springboot + websocket 来实现,
以下是实现思路,还不够完善,但是已经可以用来满足基本的需求。
代码会有下载链接,先说下思路:
1、用 ajax 请求把订阅的信息的一些前台信息传给后台
2、后台启动消费线程,消费到消息通过websocket实时传给前台
3、后台需要设置一个线程,不要过多的浪费资源
4、需要监听哪些topic,怎么过滤
5、一段时间后关闭线程
一些难点
1、websocket 无法注入其他bean,提示null,
解决方法:把websocket 类里面的context上下文设置为静态变量,并给出赋值方法,然后在启动类里面设置下
// WebSocketServer
// KafkaWebViewApplication 的 main 方法
2、当无客户端连接的时候,关闭卡夫卡的监听,可以使用事件监听来解耦这些逻辑,有个小细节,最好不要一达到0就去关闭监听,有时候只是用户刷新了页面而已,所以停留五秒钟
// WebSocketServer 的 onclose 方法
// 使用 spring 的事件 来实现解耦
3、消费者监听类
项目源代码
https://download.csdn.net/download/iloveyou_xuxu/10151097
遇到的问题
使用这个项目打包的时候会出现上述报错问题,因为spring boot内带tomcat,tomcat中的websocket会有冲突出现问题,因此跳过test编译打包,
修改配置文件,然后打包的时候 加上 -DskipTests 即可
mvn package -DskipTests
运行界面截图