# queue_read **Repository Path**: csh1998/queue_read ## Basic Information - **Project Name**: queue_read - **Description**: 该项目使用 SpringBoot+RabbitMQ+OpenFeign 相关技术,实现读取Excel文件的队列缓冲场景。 解决的核心问题:当请求太频繁,服务读取解析Excel文件速度太慢,导致服务会崩溃的问题。 方案:使用MQ做一个缓冲队列。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-17 - **Last Updated**: 2023-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # queue_read #### 介绍 该项目使用 SpringBoot+RabbitMQ+OpenFeign 相关技术,实现读取Excel文件的队列缓冲场景。 解决的核心问题:当请求太频繁,服务读取解析Excel文件速度太慢,导致服务会崩溃的问题。 方案:使用MQ做一个缓冲队列。 #### 软件架构 ![架构图](FrameworkImage.png) #### 项目难点 如何实现“传入任意一段Json字符串,业务自动精准匹配多个Excel文件中多个表的行数据”。 #### 解决方案 枚举+注解+反射 首先,使用一个枚举类,每个枚举都代表一张表,枚举值里面存放:这张表对应的Excel文件的地址、在Excel文件中的表下标、在Excel文件中的表名、这张表的列对应的Java实体类。 当传入一段Json字符串,之后遍历这个枚举类。 先进行Json字符串的反序列化,如果可以正常序列号为该枚举中对应的Java实体类,那么继续,否则过滤这个枚举,继续与下一个枚举进行判断。 找到Json字符串对应的枚举后,根据枚举中存放的Excel文件的地址、表下标、表名,使用EasyExcel框架,加载Excel文件到内存中。 每个Java实体中,使用自定义注解,标记,哪个字段表示ID。 利用反射,拿到Java实体的所有属性、属性名、属性值、属性上的注解和注解值等,然后和Excel文件转换而来的List对象进行循环匹配。找到ID相同的列表。 将Excel文件的List全部遍历一次之后,就拿到了通过Json字符串转换而来的Java实体ID值一样所有数据了。 接下来遍历新的List,比对除了ID以外的其它字段的值是否相等。 最终会得到三种结果: ID值不同,其它字段值不同 ID值相同,其它字段值不同 ID值相同,其它字段值相同 至此,整个业务逻辑就结束了。 源码请看:MsgHandleImpl类的handle(String msg)方法 #### 总结 虽然项目不大,但是学到了很多东西。 巩固了Maven、SpringBoot、RabbitMQ、FeignClient的使用。 在处理核心业务时,重点利用了枚举、注解、反射等基础知识,实现了“传入任意一段Json字符串,业务自动精准匹配多个Excel文件中多个表的行数据”。 写完之后,对反射又有了不一样的理解,原来Stream流也可以搭配反射一起使用,似乎发现了新大陆... 总而言之,收货颇多。