一、依赖环境
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 {@AutowiredRestTemplate 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>