前言
作为一名练习时长两年半的夹娃工程师,常年浸泡在增删改查的业务代码里,每当金三银四来临该迭代自己简历的时候,面对自己的项目经历都十分窘迫。突然有天学弟问我在实习公司一直做缝缝补补的工作或者是一些基于封装好的RBAC(基于角色的权限管理系统)做业务的增删改查,眼下又要找工作了不知道咋写项目经验。
无论是功能、技术栈、设计都平淡无奇,问我咋整,我打开尘封已久的简历一看,操,我不也一样吗。
当时快毕业那会也是有点焦虑,难的项目看不懂简单的项目看不上,难受的一批,于是决定自己搞个比较有意思的项目,起码能用一些新颖的技术栈,给迷茫的大学生一点小小的思路。
流式图表,顾名思义,使用流式数据做计算绘做成图表,上游向流式图表服务注册并写入数据,流式图表服务建立监听链接,监听到数据处理并推送给前端,使图表流动起来。
只是突然萌生了这个想法,代码只是完成了一半,看能不能做起来,希望能坚持搞完吧。
技术方案
- java8 + springboot2.0 + mybatis-plus搭建整体框架
- mysql业务层数据库
- redis数据计算暂存层数据库、模块间消息通知、分布式锁
- kafka流式数据组件
- guava线程池实现消费链接管理
- websocket即时通知前端数据,使用netty优化webservice
- 支持分布式扩展
- 暂时决定采用拉的模式(主要怕前端数据挤压),前端代码到时候写不下去就找人帮忙...
不使用flink这种大数据引擎是因为对刚毕业的同学可能有点吃力,不是我不会,等做完了有时间精力就用flink引擎改造。
数据库设计
CREATE TABLE `STREAM_CONFIG` (
`id` bigint NOT NULL AUTO_INCREMENT,
`conf_id` char(100) CHARACTER,
`name` char(100) CHARACTER NOT NULL DEFAULT '' COMMENT '流式数据源名称',
`conn_config` text COMMENT '流式数据源配置',
`fields` text COMMENT '流式数据源字段信息',
`is_del` int NOT NULL DEFAULT '0',
`ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`utime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录创建时间',
`use_count` int DEFAULT NULL,
UNIQUE KEY `conf_id (`conf_id`) USING BTREE,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `CHART` (
`id` bigint NOT NULL AUTO_INCREMENT,
`chart_id` char(100) CHARACTER,
`name` char(100) CHARACTER NOT NULL DEFAULT '' COMMENT '流式图表名称',
`field_id` text COMMENT '流式图表使用的窗口字段id',
`is_del` int NOT NULL DEFAULT '0',
`ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`utime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录创建时间',
`use_count` int DEFAULT NULL,
UNIQUE KEY `chart_id (`chart_id`) USING BTREE,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
基础模块
- matrix-common 公共依赖、工具类、常量、
- matrix-core 管理消费链接、消费逻辑
- matrix-message 服务间通信组件
- matrix-socket 推送模块,负责与前端交互
- matrix-web 数据库增删改查
写项目最爽的阶段一是刚开始起一个很吊的名字,二是完成时的成就感,先起一个很猛的名字。代开IDEA直接开撸。
用maven搭建一个多模块项目,parent项目pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>matrix-common</module>
<module>matrix-core</module>
<module>matrix-web</module>
<module>matrix-socket</module>
<module>matrix-message</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.3</version>
</parent>
<groupId>com.uptown</groupId>
<artifactId>matrix</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
其他的先不贴了,整的匆忙得调整到最合理的情况再展示出来,未来连更几波。
整体流程
最终效果
以上就是流式图表拒绝增删改查之框架搭建过程的详细内容,更多关于流式图表框架搭建的资料请关注编程网其它相关文章!