转载

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

回复“ 1024 ”或 “ 面试题 ” 获取 4T架构师 资料

背景:

公司项目有个需求, 前端上传excel文件, 后端读取数据、处理数据、返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没人愿意傻等, 由于项目暂未使用ActiveMQ等消息队列中间件, 而redis的lpush和rpop很适合作为一种轻量级的消息队列实现, 所以用它完成此次功能开发

一、本文涉及知识点

1、excel文件读写--阿里easyexcel sdk

2、文件上传、下载--腾讯云对象存储

3、远程服务调用--restTemplate

4、生产者、消费者--redisTemplate leftPush和rightPop操作

5、异步处理数据--Executors线程池

6、读取网络文件流--HttpClient

7、自定义注解实现用户身份认证--JWT token认证, 拦截器拦截标注有@LoginRequired注解的请求入口

当然, Java实现咯

涉及的知识点比较多, 每一个知识点都可以作为专题进行学习分析, 本文将完整实现呈现出来, 后期拆分与小伙伴分享学习。整编:微信公众号,搜云库技术团队,ID:souyunku

二、项目目录结构

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

项目结构

说明:数据库DAO层放到另一个模块了, 不是本文重点

三、主要maven依赖

1、easyexcel

2、JWT

3、redis

4、腾讯cos

四、流程

1、用户上传文件

2、将文件存储到腾讯cos

3、将上传后的文件id及上传记录保存到数据库

4、redis生产一条导入消息, 即保存文件id到redis

5、请求结束, 返回"处理中"状态

6、redis消费消息

7、读取cos文件, 异步处理数据

8、将错误数据以excel形式上传至cos, 以供用户下载, 并更新处理状态为"处理完成"

9、客户端轮询查询处理状态, 并可以下载错误文件

10、结束

五、实现效果

1、上传文件

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

上传文件

2、数据库导入记录

数据库导入记录

3、导入的数据

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

导入的数据 4、 下载错误文件

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

下载错误文件

5、错误数据提示

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

错误数据提示

5、查询导入记录

SpringBoot项目:RedisTemplate实现轻量级消息队列(含代码)

查询导入记录

六、代码实现

1、导入excel控制层

2、service层

3、redis生产者

4、redis消费者

5、处理任务线程类

说明:处理数据的业务逻辑代码就不用贴了

6、上传文件到cos

7、下载文件

8、读取网络文件流

9、ExcelUtil

说明:至此, 整个流程算是完整了, 下面将其他知识点代码也贴出来参考

七、其他

1、@LoginRequired注解

2、MyControllerAdvice

3、AuthenticationInterceptor

4、JwtUtil

结语:OK, 搞定,睡了, 好困

原文  http://mp.weixin.qq.com/s?__biz=MzA3MTUzOTcxOQ==&mid=2452969248&idx=1&sn=6c55698e22991b01c318cc1043e0cc1f
正文到此结束
Loading...