我正在参加「启航方案」
前语
作为一名操练时长两年半的夹娃工程师,常年浸泡在增修改查的事务代码里,每当金三银四降临该迭代自己简历的时分,面临自己的项目阅历都十分困顿。突然有天学弟问我在实习公司一向做缝缝补补的作业或者是一些根据封装好的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>
其他的先不贴了,整的匆忙得调整到最合理的情况再展现出来,未来连更几波。
整体流程
最终作用