一、依赖环境
SpringCloud Alibaba 依赖 Java 环境来运行。还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用。
- 64 bit JDK 1.8+;
- Maven 3.2.x+。
spring-cloud-alibaba相关网址:
地址:https://github.com/alibaba/spring-cloud-alibaba/wiki
地址:https://spring.io/projects/spring-cloud-alibaba#learn
二、版本、组件之间的适配关系
spring Cloud Alibaba版本需和spring Boot版本相互对应。
版本对应地址(github Alibaba网址):
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
spring Cloud Alibaba脚手架地址:https://start.aliyun.com/
也可以用该脚手架进行搭建,网页配置进行下载或者用IDEA进行生成。
三、搭建一个分布式架构进行服务调用
创建一个分布式项目,创建一个主项目springcloud-demo。
再创建两个module(springboot项目,maven使用父级的),分别是order订单和stock库存服务。
1、创建一个父级项目结构-springcloud-demo。采用springboot项目进行创建。
2、src等删除,留着pom即可,pom文件加入pom配置。
3、创建order子服务,建议创建maven项目,maven配置由父项目全局使用,IDEA会自动在maven中注册子服务。
修改maven,新增spring-boot-starter配置,并且自行写OrderApplication启动类,就是一个简答的springboot项目。
在RestConfig中注入RestTemplate,用于简单调用远端服务
@Component
public class RestConfig {
@Bean("RestTemplate")
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder.build();
}
}
OrderController写一个新增订单接口,调用库存服务。
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("add")
public String add(){
System.out.println("新增订单");
//调用库存服务
String forObject = restTemplate.getForObject("http://localhost:8811/stock/reduce", String.class);
return "新增订单,"+forObject;
}
}
同样,创建stock子服务,写一个stock/reduce接口(即上面代码进行调用)给order服务调用。
访问测试:
该分布式架构之前服务调用关系错综复杂,难以维护。
四、修改为spring cloud alibaba微服务
案例版本选择:
- Spring Cloud Alibaba Version:2.2.6.RELEASE。组件版本会根据选择的Spring Cloud Alibaba版本自行依赖,无需手动修改。
- Spring Boot Version:2.3.2.RELEASE
- Spring Cloud Version:Spring Cloud Hoxton.SR9
父maven项目中引入spring-cloud-alibaba即可。
如何使用见:
https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/README-zh.md
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我们对之前父级pom进行一下规范化:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>order</module>
<module>stock</module>
</modules>
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.3.11.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
<groupId>com.tc</groupId>
<artifactId>springcloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-demo</name>
<description>springcloud-demo</description>
<!-- 不打包主模块-->
<packaging>pom</packaging>
<!-- 版本管理-->
<properties>
<java.version>1.8</java.version>
<spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
<spring.cloud.version>Hoxton.SR9</spring.cloud.version>
<spring.boot.version>2.3.2.RELEASE</spring.boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 需要继承的包都放在这里面-->
<dependencyManagement>
<dependencies>
<!--spring-cloud-alibaba版本管理,通过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>
<!--spring-cloud版本管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring-boot版本管理,其实就是上面的parent移到这来进行管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>