1
头图

引言

随着互联网技术的不断发展,微服务架构已经成为当今软件开发领域的重要趋势。而Springboot和SpringCloud作为Java后端框架技术的代表,为微服务架构的实现提供了强大的支持。

对于Sprinboot3.x相较以前的版本有了很多的变化,网上资料大多一个乱字评价,没有干货,没有实践。

本文将用一个简单的Demo,来演示我们如何集成最新的版本,实现微服务的解决方案。(Demo 代码,仅实现了服务发现能力)

背景知识

一、Springboot3:快速构建微服务应用

Springboot是一个用于快速构建Spring应用的框架。它简化了Spring应用的初始搭建以及开发过程,并提供了内置的依赖管理。Springboot3在原有基础上进行了重大升级,引入了更多新特性和优化。

  1. 独立运行应用程序:Springboot可以轻松将应用程序打包成可执行JAR文件,并可以独立运行。这为微服务的部署和扩展提供了极大的便利。
  2. 嵌入式Web服务器:Springboot支持内置的Web服务器,例如Tomcat和Jetty。这使得开发者无需在本地安装任何服务器软件,便可直接运行应用程序。
  3. 自动配置:Springboot提供了自动配置功能,可以根据项目中的依赖关系自动进行配置,减少了手动配置的工作量。
  4. 丰富的插件支持:Springboot提供了丰富的插件,方便与其他框架进行集成,例如Hibernate、Thymeleaf等。

二、SpringCloud:构建分布式微服务架构

SpringCloud是Spring家族中的一员,它提供了一系列的分布式系统解决方案,包括服务注册与发现、负载均衡、熔断器等。通过SpringCloud,我们可以轻松地构建微服务架构的应用程序。

  1. 服务注册与发现:SpringCloud使用了Eureka作为服务注册与发现框架,实现了服务的自动注册与发现。这使得微服务之间的通信变得更加高效和可靠。
  2. 负载均衡:SpringCloud使用了Ribbon作为负载均衡框架,可以根据不同的策略对服务进行负载均衡。这大大提高了系统的性能和可扩展性。
  3. 熔断器:SpringCloud使用了Hystrix作为熔断器框架,可以在服务调用出现异常时自动中断连接,防止故障扩散。这增强了系统的稳定性和可靠性。
  4. 路由网关:SpringCloud使用了Zuul作为路由网关,可以实现服务的路由和过滤。这有助于实现服务的动态管理和安全控制。
  5. 分布式事务:SpringCloud使用了Seata作为分布式事务管理框架,可以处理分布式环境下的数据一致性问题。这保证了数据的一致性和可靠性。
  6. 三、SpringCloudAlibaba:阿里云提供的微服务解决方案

SpringCloudAlibaba是SpringCloud与中国阿里云合作推出的微服务解决方案。它基于阿里云丰富的云服务资源,提供了更加完善的微服务支持。

  1. 云服务资源管理:SpringCloudAlibaba提供了云服务资源管理功能,可以方便地管理阿里云的各种资源,例如数据库、缓存等。这使得开发者可以更加专注于业务逻辑的实现。
  2. 高可用负载均衡:SpringCloudAlibaba使用了阿里云的高可用负载均衡方案,可以在保证系统性能的同时,提高系统的稳定性。
  3. 云安全:SpringCloudAlibaba与阿里云的安全服务进行了集成,提供了更加全面的安全保障措施,例如数据加密、访问控制等。这保护了系统的数据安全和完整性。
  4. 分布式事务管理:SpringCloudAlibaba与Seata进行了深度集成,提供了更加完善的分布式事务管理功能。这保证了系统在分布式环境下的数据一致性。

ok,废话不多聊,上干货。

演示业务背景

订单新增,扣减锁定产品的存量

相关组件版本

截止2023/11/3 均为最新版本

JDK Version : 17

Nacos Server 版本: 2.3.0-BETA

image.png

SpringBoot Parent 版本:3.1.5

Nacos Client 版本: 2.3.0-BETA

SpringCloud 版本: 2022.0.4

SpringCloudAlibaba 版本: 2022.0.0.0

集成说明

父工程,完成依赖引入

  1. 添加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>
  1. 添加服务发现依赖
<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>
  1. 添加其余相关演示依赖

运行演示

image.png

image.png

image.png

强调说明

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 思否写作挑战赛活动,欢迎正在阅读的你也加入。

小隐
32 声望514 粉丝