基于spring cloud alibaba搭建微服务架构demo
一、环境
因为本地电脑jdk环境还是1.8的,所以springboot和spring cloud alibaba选用2.x版本。
二、集成组件
Nacos:服务发现、注册中心
Gateway:网关
Openfeign:服务间远程调用组件
Seata:分布式事务
Sentinel:限流、降级、熔断组件
Rocketmq:消息中间件
三、项目搭建
开发工具IDEA
点击file->New->Project新建Maven项目

删除新建项目的src目录作为父级目录
点击file->Project Structure->Modules-> + ->New Module


依次增加子模块
order-service:订单服务
common:公共模块
gateway-service:网关模块
storage-service:库存模块
account-service:账户模块
最终项目结构模块如图

父级模块pom文件引入springboot和spring cloud alibaba依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>spring-cloud-alibaba-test</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>common</module>
<module>gateway-service</module>
<module>order-service</module>
<module>storage-service</module>
<module>account-service</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version> <spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.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.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
四、Nacos:服务发现与注册中心
上面我们搭建了基础项目框架,接下来就引入nacos来统一治理微服务模块。
由于springboot和spring cloud alibaba使用的2.x版本,因为我这里下载的是2.2.3版本的nacos。
到官网https://nacos.io/download/release-history上下载

接着分别在order-service、gateway-service、storage-service、account-service的pom文件分别加入nacos依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动nacos服务端
·因为nacos需要使用数据库,首先进入nacos的conf目录,修改配置文件application.properties,将注释掉连接数据库的配置打开

·将conf目录下的mysql-schema.sql文件导入自己本地数据库

·到nacos安装bin目录下,点击startup.cmd启动nacos服务,如果启动失败,检查自己的数据库连接是否正确,JAVA_HOME环境变量是否配置。

启动各个微服务
在order-service、gateway-service、storage-service、account-service的resource下增加各自的yml文件application.yml




启动各个服务的启动类

启动成功,登录之前启动的nacos服务端(http://localhost:8848/nacos)查看服务是否已注册到nacos

五、Gateway:网关
在gateway-service服务pom文件下增加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
同时去掉spring-boot-starter-web依赖包,因为gateway的依赖包已经包含了springboot的启动包。
在gateway-service的application.yml文件增加配置

接着在order-service服务中增加一个接口测试网关服务

重启order-service和gateway-service服务测试接口,因为网关端口是8088,在浏览器输入http://localhost:8088/api/order/create

测试成功,可以看到通过统一的网关在后端跳转到了order-service服务。
六、Openfeign:远程调用组件
在本案例中,在order-service服务中分别调用storage-service和account-service服务。
在order-service服务pom文件中增加feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在order-service中分别增加storage-service和account-service的调用接口



接着在storage-service和account-service服务中增加controller接口,参数跟在order-service中一样


在order-service的启动类中增加注解@EnableFeignClients,yml文件增加配置

重启服务,我们测试account-service接口在order-service中被调用情况


account-service上的接口被order-service调用成功。
七、Seata:分布式事务组件
由于springboot和spring cloud使用2.x版本,这里seata使用的1.4.2版本,首先下载seata服务端(地址:https://seata.apache.org/zh-cn/docs/v1.4/download)。
下载完直接到bin目录点击seata-server.bat启动,因为本示例使用file模式,所以不用修改seata-server任何配置文件,直接启动。

order-service、storage-service、account-service的pom文件分别加入seata依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
application.yml文件分别加入seata配置

接下来只需添加@GlobalTransactional注解,即可保证服务间调用的事务一致性。



八、Sentinel:限流、降级、熔断组件
首选下载jar包(地址:https://github.com/alibaba/Sentinel/releases),通过Java命令启动jar包,进入控制台。本示例下载版本为1.8.6.。


order-service的pom文件增加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
application.yml文件增加sentinel配置

启动各个服务,访问order-service订单接口,到sentinel控制台

从控制台中可对接口进行限流、熔断。
代码中手动对调用服务接口进行降级,如在order-service中对storage-service接口降级,在order-service配置中增加配置。



九、Rocketmq:消息组件
下载地址:https://rocketmq.apache.ac.cn/download/。本示例使用版本为4.9.5。
下载后解压缩包rocketmq-all-4.9.5-bin-release.zip,进入bin目录,分别启动mqnamesrv.cmd和mqbroker.cmd,如果没有设置Java环境变量,则通过cmd窗口启动,打开一个cmd窗口:
D:\soft\jdk1.8.0_231\bin>setROCKETMQ_HOME=D:\soft\springcloud\rocketmq-all-4.9.5-bin-release
D:\soft\jdk1.8.0_231\bin>java -cp ".;D:\soft\springcloud\rocketmq-all-4.9.5-bin-release\lib\*" org.apache.rocketmq.namesrv.NamesrvStartup
再打开一个cmd窗口:
D:\soft\jdk1.8.0_231\bin>set ROCKETMQ_HOME=D:\soft\springcloud\rocketmq-all-4.9.5-bin-release
D:\soft\jdk1.8.0_231\bin>java -cp ".;D:\soft\springcloud\rocketmq-all-4.9.5-bin-release\lib\*" org.apache.rocketmq.broker.BrokerStartup -n 127.0.0.1:9876 autoCreateTopicEnable=true
本示例以order-service作为生产端,account-service作为消费端。分别在pom文件增加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
order-service增加配置

account-service增加配置

接下来在order-service增加发送消息的代码

account-service增加接收消息的代码

启动order-service和account-service服务,访问订单创建接口,在订单创建业务里向account-service发送消息,account-service接收到order-service发送的消息。

更多推荐
所有评论(0)