Github:github.com/Zealon159/l…
觉得有帮助的伙伴们欢迎 Star
项目介绍
light reading cloud(轻松阅读)是一款图书阅读类APP,基于 SpringCloud 生态开发的微服务实战项目,涉及 SpringCloud-Config、Eureka、OpenFeign、Hystrix、Jwt、SpringCloud-Gateway、ElasticSearch 等技术栈的应用。
项目的侧重点主要是基于实际业务场景使用微服务架构落地的思路,会采用图文的方式介绍每个服务或接口的原理以及为什么使用这种方式实现,希望会对想入门微服务的同学有所帮助。
客户端采用 Vue.js 、Vuetify 开发:点击进入仓库
演示
演示地址:reading-cloud.zealon.cn/#/index ,手机访问效果佳 ^_^
数据库地址:47.104.241.41 ,端口 3306
数据库账户:hello_developer ,密码:Bestyou2020.com
图书服务接口:reading-cloud.zealon.cn:8001/swagger-ui.…
精品页接口:reading-cloud.zealon.cn:8002/swagger-ui.…
账户中心接口:reading-cloud.zealon.cn:8003/swagger-ui.…
部分截图:

架构图
客户端访问接口由统一流量入口 SpringCloud-Gateway 接收请求、响应结果,网关与微服务基于异步IO Netty通信,微服务获取配置文件启动后通过Eureka完成服务注册与发现,微服务之间的相互调用基于http协议的 FeignClient客户端。
核心架构图如下:

系统模块
微服务拆分策略:
- 业务先行,理清楚业务边界和依赖
- 先有独立的模块,后有分布式服务
- 模块之间的依赖关系要清晰、参数简单、耦合要少
- 最重要的是需求,根据需求判断具体价值,再按价值建立设计原则,最后按照设计原则来选择落地的技术方案,而不是根据技术来套业务需求
阅读APP,如果你有阅读的习惯,相信对此类产品并不陌生,其核心功能是阅读,当然在阅读之前需要发现想要读的图书,这就需要精品(榜单)页、排行、分类、搜索等功能的支撑,而用户数据主要分为账户、会员、书架、积分、评论等功能。
所以根据业务场景可进行最基础的拆分服务:图书服务、精品页服务、排行榜服务、搜索服务、账户服务、会员服务、消息服务、积分服务、活动服务、评论服务、支付服务等等(实际上会有比这更多的功能哈)
本项目进行以下拆分:
| No | 工程模块 | 说明 | 依赖 |
|---|---|---|---|
| 1 | reading-cloud-common | 公共模块,存放通用的POJO、工具类等文件。 | - |
| 2 | reading-cloud-config | 配置中心,存储每个微服务的配置 | - |
| 3 | reading-cloud-eureka | 注册中心,服务发现与注册 | - |
| 4 | reading-cloud-gateway | 服务网关,流量入口、权限验证等 | - |
| 5 | reading-cloud-book | 图书中心,提供图书基础数据接口 | 1 |
| 6 | reading-cloud-account | 账户中心,提供账户授权、用户服务等接口 | 1、5 |
| 7 | reading-cloud-homepage | 精品页中心,提供App精品页接口 | 1、5、6 |
| 8 | reading-cloud-feign-client | Feign客户端,提供微服务的公用客户端 | 1 |
这样拆分的粒度比较适中,其中每个服务相对都比较独立。由于个人精力有限,只实现了最核心的业务:图书、精品页、账户、书架等服务。
从依赖中可以看出,除了common之外,图书中心被依赖的次数最多,由此可见图书中心是最基础的服务,为此需要对这类底层的服务分配更多的容器,具体的还需要根据 DAU、QPS 等综合衡量,决策更合适的数值,是否要进一步拆分微服务等等。
快速开始
step1 - 创建数据库
导入数据库脚本,分别创建数据库 reading_cloud_resource、reading_cloud_account,然后导入建表脚本。
需要示例数据的话,可以到阿里云数据库导出数据哈,在上面有数据库连接信息。
step2 - 配置文件
由于我的服务器内存不够用了,就没搭建配置中心,可以直接修改每个工程的 bootstrap.yml 文件,更新数据库信息、redis配置信息等。
step3 - 启动程序
首先启动注册中心,然后依次启动图书中心、账户中心、精品页中心、服务网关,可以在配置文件中自行修改端口哈。
更多的项目说明,请进入Git仓库查阅哦。
点击进入仓库