目录
1,SpringCloud的介绍
1.概念:Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。
2.优点和缺点
(1)优点
①每个服务足够内聚,足够小,代码容易理解、开发效率提高;
②服务之间可以独立部署,微服务架构让持续部署成为可能;
③精细度业务控制,每个服务可以各自进行负载均衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
④容易扩大开发团队,可以针对每个服务组件开发团队;
⑤提高容错性,一个服务的内存泄露并不会让整个系统瘫痪;
⑥每个服务可以用不同的技术开发,系统不会被长期限制在某个技术栈上。
(2)缺点
①开发人员要处理分布式系统的复杂性:
设计服务之间的通信机制,需要考虑分布式事务等问题;
涉及多个服务直接的自动化测试;
服务管理的复杂性(PS:现在docker的出现适合解决这个问题);
②对于业务数据和处理能力不是很明确的创业公司,不适合微服务架构模式,这时候最重要的是快速开发、快速部署、快速试错。
3.应用场景
适合分布式业务,复杂度高的,并发量大的场景
4.SpringCloud与Dubbo
(1)架构完整度上,Dubbo只有服务注册/服务治理(zookeeper)两个模块,SpringCloud已经有二十多个模块,而且还在增加;
(2)SpringCloud的社区活跃度高;但Dubbo有高质量的中文文档
(3)Dubbo服务间的通讯采用的RPC,SpringCloud则是Http的Rset,RPC对业务接口有强依赖性,需要通讯双方有一样的接口,REST更为轻量化,只通过一个约定进行规范,不存在代码间的耦合。
5.SpringCloud的实现
Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,共有两代实现。
Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。
2,RestTemplate初体验
2.1,创建一个父工程(管理所有的依赖)
父依赖:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modules>
<module>order</module>
<module>stock</module>
</modules>
<packaging>pom</packaging>
<groupId>com.lili</groupId>
<artifactId>springcloud-alibaba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-alibaba</name>
<description>springcloud-alibaba</description>
dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2order子项目和stock子项目
order和stock项目都加入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
order工程端口号:
server:
port: 8001
stock工程端口号:
server:
port: 8002
stock项目controller层
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/stockList")
public String getStock(){
System.out.println("库存");
return "stock";
}
}
order项目
1,新建com.yss.config配置类包,将restTemplate对象加入组件,作为配置类
@Configuration
public class RestConfig {
@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder builder){
return builder.build();
}
}
2.编写controller层,并进行服务的调用
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/orderList")
public String getOrder() {
System.out.println("订单");
String message = restTemplate.getForObject("http://localhost:8002/stock/stockList", String.class);
return "order" + message;
}
}
项目大体结构图
3.运行结果
3.浏览器运行结果
到此本次体验就结束了!