引言
随着互联网技术的不断发展,微服务架构已经成为当今软件开发领域的重要趋势。而Springboot和SpringCloud作为Java后端框架技术的代表,为微服务架构的实现提供了强大的支持。
对于Sprinboot3.x相较以前的版本有了很多的变化,网上资料大多一个乱字评价,没有干货,没有实践。
本文将用一个简单的Demo,来演示我们如何集成最新的版本,实现微服务的解决方案。(Demo 代码,仅实现了服务发现能力)
背景知识
一、Springboot3:快速构建微服务应用
Springboot是一个用于快速构建Spring应用的框架。它简化了Spring应用的初始搭建以及开发过程,并提供了内置的依赖管理。Springboot3在原有基础上进行了重大升级,引入了更多新特性和优化。
- 独立运行应用程序:Springboot可以轻松将应用程序打包成可执行JAR文件,并可以独立运行。这为微服务的部署和扩展提供了极大的便利。
- 嵌入式Web服务器:Springboot支持内置的Web服务器,例如Tomcat和Jetty。这使得开发者无需在本地安装任何服务器软件,便可直接运行应用程序。
- 自动配置:Springboot提供了自动配置功能,可以根据项目中的依赖关系自动进行配置,减少了手动配置的工作量。
- 丰富的插件支持:Springboot提供了丰富的插件,方便与其他框架进行集成,例如Hibernate、Thymeleaf等。
二、SpringCloud:构建分布式微服务架构
SpringCloud是Spring家族中的一员,它提供了一系列的分布式系统解决方案,包括服务注册与发现、负载均衡、熔断器等。通过SpringCloud,我们可以轻松地构建微服务架构的应用程序。
- 服务注册与发现:SpringCloud使用了Eureka作为服务注册与发现框架,实现了服务的自动注册与发现。这使得微服务之间的通信变得更加高效和可靠。
- 负载均衡:SpringCloud使用了Ribbon作为负载均衡框架,可以根据不同的策略对服务进行负载均衡。这大大提高了系统的性能和可扩展性。
- 熔断器:SpringCloud使用了Hystrix作为熔断器框架,可以在服务调用出现异常时自动中断连接,防止故障扩散。这增强了系统的稳定性和可靠性。
- 路由网关:SpringCloud使用了Zuul作为路由网关,可以实现服务的路由和过滤。这有助于实现服务的动态管理和安全控制。
- 分布式事务:SpringCloud使用了Seata作为分布式事务管理框架,可以处理分布式环境下的数据一致性问题。这保证了数据的一致性和可靠性。
- 三、SpringCloudAlibaba:阿里云提供的微服务解决方案
SpringCloudAlibaba是SpringCloud与中国阿里云合作推出的微服务解决方案。它基于阿里云丰富的云服务资源,提供了更加完善的微服务支持。
- 云服务资源管理:SpringCloudAlibaba提供了云服务资源管理功能,可以方便地管理阿里云的各种资源,例如数据库、缓存等。这使得开发者可以更加专注于业务逻辑的实现。
- 高可用负载均衡:SpringCloudAlibaba使用了阿里云的高可用负载均衡方案,可以在保证系统性能的同时,提高系统的稳定性。
- 云安全:SpringCloudAlibaba与阿里云的安全服务进行了集成,提供了更加全面的安全保障措施,例如数据加密、访问控制等。这保护了系统的数据安全和完整性。
- 分布式事务管理:SpringCloudAlibaba与Seata进行了深度集成,提供了更加完善的分布式事务管理功能。这保证了系统在分布式环境下的数据一致性。
ok,废话不多聊,上干货。
演示业务背景
订单新增,扣减锁定产品的存量
相关组件版本
截止2023/11/3 均为最新版本
JDK Version : 17
Nacos Server 版本: 2.3.0-BETA
SpringBoot Parent 版本:3.1.5
Nacos Client 版本: 2.3.0-BETA
SpringCloud 版本: 2022.0.4
SpringCloudAlibaba 版本: 2022.0.0.0
集成说明
父工程,完成依赖引入
- 添加SpringCloud、SpringCloudAlibaba 相关依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 添加服务发现依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.3.0-BETA</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 添加其余相关演示依赖
运行演示
强调说明
Springboot 3.x 支持最小JDK版本为17
Nacos Server 2.3.0 需要对应版本的客户端引入,最新版SpringCloudAlibaba Discovery 引入版本落后,需自行引入
SpringCloud 2022.x.x 不再支持默认Netflix 相关依赖引入,官方推荐采用spring-cloud-starter-loadbalancer 完成服务发现拦截器的处理
代码
相关代码已经上传至 Github,有需要的同学欢迎大家fork、start。
说在最后
最新的集成方案,可以应付当下更多的可能性,当然生产环境使用,大家还是慎用!!
其中,坑比较多,在强调说明中,提到了一些,但不是全部,有比较多的问题,需要进一步源码学习。有机会,会写更多的最新源码解析的内容给大家,谢谢,欢迎大家点赞、评论、转发!!!
本文参与了SegmentFault 思否写作挑战赛活动,欢迎正在阅读的你也加入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。