分布式项目搭建
SpringCloud Alibaba 依赖
Java
环境来运行。还需要为此配置
Maven
环境,请确保是在以下版本环境中安装使用:
idea创建分布式项目搭建。
spring initialize spring的初始化向导创建项目:
- 会快速创建一个spring-boot项目
- 能快速选择一些启动器
- 会创建application全局配置文件
- 以及会创建一个启动类
mavn创建项目:mavn创建项目就需要手动去创建以上的东西了
这就是spring initialize和maven创建项目的区别
1. 基于SpringBoot的父maven项目
父maven项目只是用来聚合,或者是说管理maven子项目的,子maven项目继承父maven依赖等一些配置。父maven项目一般不会打成jar包

2. 创建2个服务(订单服务和库存服务)
建议使用maven创建,因为子maven项目可以继承父maven项目 所以就不需要再创建重复的配置了

两个子服务引入springmvc
在对应服务里分别引入maven包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
创建两个子服务的启动类
order
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
stock
@SpringBootApplication
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run(StockApplication.class,args);
}
}
给spring注入RestTemplate
@Component
public class RestTemplateConfig {
/**
* restTemplate 配置
* 通过构模式
*
* @param builder
* @return
*/
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
两个子服务中分别创建接口
订单接口
@RestController
@RequestMapping("/order")
public class OrderController {
@Resource
private RestTemplate restTemplate;
@RequestMapping("/add")
public String add() {
System.out.println("下单成功!");
// 用spring-boor的resTemplate 实现服务与服务之间的调用(不用自己再手动序列化反序列化)
String msg = restTemplate.getForObject("http://localhost:8081/stock/reduce", String.class);
return "hello word"+msg;
}
}
库存接口
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/reduce")
public String reduce() {
System.out.println("扣减库存成功");
return "加减库存";
}
}
通过yml配置两个子服务的启动端口号
order
stock
启动服务并实现服务与服务之间的调用
在浏览器调用order服务接口 http://localhost:8080/order/add
order后台日志
stock后台日志
这样就实现了服务之间的调用。
但是随着服务的不断增多,这个resTemplate调用的url中的ip地址 维护起来就会多,一旦某个服务器下架了或者进行负债均衡了,维护起来就非常的麻烦。
这个时候我们就可以采用我们的注册中心来解决以上的问题。
分布式构架转变为微服务架构
在父maven项目中加入<dependencyManagement>
注意要去官网查找对应版本的对应关系
<!-- 在父maven中加入依赖子maven项目一定要显示的声明 -->
<dependencyManagement>
<dependencies>
<!--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>
<!--SpringBoot的版本管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--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>
<!--alibaba Spring boot版本管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>${aliyun-spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
下期再见更新spring cloud alibaba 整合nacos解决我们上面分布式系统的问题。