这种确实是要一步一步来的,急不得。
我的建议是,动手练之前,最好先弄清三件事。清楚了再去做练习的事情,不然效果会差很多。分别是:
- 微服务的拆分原则;
- 微服务和微服务之间如何调用;
- 当前主流的微服务应用框架;
下面逐个介绍。
拆分原则
这个是我自己的经验教训哈,未必是对的,仅供参考。
首先呢,我待过的一家公司,核心业务的代码,其实质量还是可以的,但确老是「躺着也中枪」,因为被其他的非核心模块给影响到了。
比如:
- 一条慢的sql;
- 接口的代码有内存泄漏问题;
- xxx模块刚好有对应的营销活动;
悲催了,上面的几个原因,导致整个服务不可用了。但是核心模块的代码一点问题都没有的,却别其他模块影响到了。
那是损失呀,尤其是下单和支付系统,是公司赚钱的入口来的。且用户体验也非常的不好,投诉还非常多,用户投诉,内部的产品经理和运营在投诉。且还有很多很难修复的脏数据。
IT部门是顶不住这种压力的,公司也顶不住。
因此,为了让核心系统不被无辜的拖累到,就用微服务的方式独立出去。数据库也是独立的。
再者,IT部门为了保命,说真的,也得这么干,不然分分钟滚蛋,老是出故障。
简单小结一下微服务划分的第一个原因:真正的核心系统不能被无端的拖累到,造成巨大的损失。
当然,独立出去之后可以独立扩容,也是一个非常明显的好处。那还有其他的微服务划分规则吗? 当然有:
- 开发人员太多了,就单独一个巨大的单体服务,开发效率反而会降低。各种发布节奏不一样,各种冲突等;像我之前的带的技术团队,30多个后端开发,就用一个单体,那很不好并行。后面我就调整了组织架构,每个小组独立负责自己的微服务,每次有业务需求来,分解后,各干各的,需求的吞吐量提高了很多的。每个小组里的人,后面对自己负责的微服务的代码,都非常熟悉了,做需求老快了。他们不需要了解其他小组的系统的代码的;
- 微服务的定位,像我这边就有一个独立的资源类型的微服务,专门去应付各种下载大文件,解析邮件,pdf,上传文件等重量级操作;
那微服务和微服务之间的调用方式是怎么样的呢?
无论是用feign或者rpc的方式,一般都有一个「发布」的动作。也即是服务的提供方,会生成一个client。
你在你自己的微服务引入进来即可。然后就可以使用这个client,调用里面的方法,会自动触发去调用远程的微服务接口的。就像是本地调用一样。
下面我用阿里的RPC框架作为例子并结合我生产环境的代码。
假设进销存微服务服务要调用物料的微服务,那么物料微服务工程里可以这么来定义接口:
java
public interface MaterialFacade {
Result<List<MaterialDTO>> getMaterialByIdList(List<MaterialRequestDTO> materialDtoList);
}
然后写一个实现类:
java
@RequiredArgsConstructor
@DubboService(version = "${material.rpc.version:1.0.0}")
@Slf4j
public class MaterialFacadeImpl implements MaterialFacade {
Result<List<MaterialDTO>> getMaterialByIdList(List<MaterialRequestDTO> materialDtoList) {
//具体的内部实现代码
}
}
然后注册到注册中心里就可以了。都是微服务启动后,会自动注册到注册中心的。像我这边用的是nacos,可以在nacos看到这个微服务的。
那进销存服务如何调用这个微服务呢?
第一步是在pom.xml文件里引入进来即可:
xml
<dependency>
<groupId>com.xxxx</groupId>
<artifactId>service-material-api</artifactId>
<version>1.0.0</version>
</dependency>
第二步是直接使用物料微服务的client。
java
@Component
@Slf4j
public class XxxxxServiceImpl {
@DubboReference(version = "${material.rpc.version:1.0.0}", timeout = 3000)
private MaterialFacade materialFacade;
public void test () {
List<MaterialRequestDTO> materialDtoList = new ArrayList<>();
Result<List<MaterialDTO>> result = materialFacade.getMaterialByIdList(materialDtoList);
if (result.isFail()) {
throw BusinessException.of(result);
}
return result.getData();
}
}
上面就是整个的使用过程。其实不难的。
如果基于HTTP的呢? 一样的,也是走发布,引入,调用的方式。非常不建议直接用http去调用。统一用client的方式就行。
现在用的比较多是feign。
接下来就是了解主流的微服务应用框架
我司的话,整套的微服务体系用的是:
Spring Cloud Alibaba
目前这套用的是比较多的,且微服务涉及到的组件,我尽量全部用阿里的,比如:
- nacos:承接配置中心和注册中心;
- sentinal:限流组件;
- ScheduleX:定时任务;
- oss:文件视频存储等;
- Dubbo:rpc框架;
- 。。。。。。。。。。。
当然你用原生的Spring Cloud框架也是可以的。但是我想说的是,无论是哪个框架,一些脱离于框架的知识点是需要去了解的:
- 配置中心;
- 注册中心;
- 限流和熔断组件;
- 分布式日志追踪;
- 等等。
当你要真正去练习微服务项目时,可以按照我刚才提供的思路,按部就班先去看上面提到的三方面的内容。
相当于是先建立一个简单的框架。
怎么通过练习掌握微服务

是有一些学习路径的,如下:
路径A:GitHub开源项目
以下star数为2026年6月在GitHub检索的大致数量,会变动。链接放在文末「参考的内容」。
| 分层 | 仓库 | Stars(约) | 适合练什么 |
|---|---|---|---|
| 组件/官方示例 | alibaba/spring-cloud-alibaba 内 examples | 父仓库约2.9万 | Nacos、Sentinel、Seata等单组件;integrated-example是一站式小闭环 |
| 完整业务·电商 | macrozheng/mall-swarm | 约1.3万 | 微服务商城:网关、注册配置、监控、电商链路;配套文档全 |
| 完整业务·电商(轻量) | newbee-ltd/newbee-mall-cloud | 约350 | SCA电商,体量小于mall-swarm |
| 完整业务·后台 | pig-mesh/pig | 约6600 | 网关、鉴权、Nacos、多模块拆分 |
| 完整业务·后台 | yangzongzhuan/RuoYi-Cloud | 约1700 | 若依微服务版,国内资料多 |
| 分章教程 | forezp/SpringCloudLearning | 约1.8万 | 教程配套源码,按章练Feign/Gateway等 |
| Spring官方 | spring-petclinic-microservices | 约2100 | 官方Petclinic微服务版 |
| 架构视野 | GoogleCloudPlatform/microservices-demo | 约2.0万 | 10服务电商、K8s/gRPC |
路径B:公司里的真实微服务
有权限时,先把代码都clone下来,然后选择一个核心模块,从入口到落库的完整链路看一下,了解一些实际的用法,并思考这么划分的依据是什么,不懂的就多去问问。尤其是问高手。
路径C:带完整源码的专栏或课程
能对照源码、有分模块演进过程的专栏才适合当练习材料;纯概念课适合补充认知,不适合单独当练习。当然你也可以看看我写的专栏。
路径D:自己撸一个
从单体或demo里拆出2~3个服务,数据库也必须是独立的,然后刻意做一条跨服务调用,走client做一次同步调用。
并把一些微服务组件运用上去。
用AI IDE读项目、梳理文档和面试
有了合适项目(开源、公司、专栏源码或自建)之后,AI IDE则是加速器。比如:
- 让AI列出各模块职责、画依赖图、生成文档。
- 不懂就问,可以在IDE里
@具体文件或选中代码提问或者直接写提示词; - 基于当前代码出面试题。 让AI针对这个项目出题并给参考答案,面试时能落到具体模块;
不懂就问:可以直接这样问
- 这个
@FeignClient/@DubboReference触发的是哪条远程调用? - 网关路由在哪配?请求
/api/order会打到哪个服务? - 为什么订单和库存各有一个
-api子模块? - 这个启动报错,最可能缺哪个中间件或配置?
- Sentinel限流在本仓库是代码配还是配置中心?
- 跟一下这个方法,下游还调了哪些服务?
梳理学习笔记:基于当前微服务项目,输出:①各服务职责与独立库;②从网关跟一条下单/登录链路的调用顺序;③注册、配置、网关、限流、追踪分别在哪。按模块生成学习笔记,标注关键类名。
出面试题:基于当前微服务项目,出15道微服务面试题,覆盖:服务拆分、注册发现、网关、Feign/RPC、限流熔断、分布式事务、配置中心。每题给参考答案,并指出在本项目里对应的模块或配置文件。
小结
Java微服务练习,先建立拆分、协作、平台能力三件事的认知,然后动手+思考+再结合AI提升学习效率。