spring cloud alibaba (一)
Spring Cloud Alibaba
这节主要目标:
- 掌握
nacos使用 - 了解服务与服务之间调用
1、简介
1.1、什么是分布式
将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式)
1.2、什么是Spring Cloud
spring cloud提供了一些可以让开发者快速构建分布式应用的工具。
主要解决了分布式中,服务注册发现,远程服务调用,负载均衡,配置中心,链路监控等组件问题。
1.3、什么是Spring Cloud Alibaba
Spring Cloud Alibaba 提供分布式应用开发的一站式解决方案。
它包含开发分布式应用程序所需的所有组件。
只需添加一些注解和少量配置,即可构建分布式应用系统。
基于Spring Cloud上进行改进。
1.4、Spring Cloud Alibaba相关组件
| 组件 | 作用 |
|---|---|
| nacos | 注册中心(服务注册与发现)、配置中心(动态配置管理) |
| Ribbon | 负载均衡 |
| Feign | 声明式Http客户端(调用远程服务) |
| Sentinel | 服务容错(限流、降级、熔断) |
| Gateway | API网关(webflux编程模式) |
| Sleuth | 调用链监控 |
| Seata | 原Fescar,即分布式事务解决方案 |
2、添加依赖
一定找对应spirngboot版本的springcloud版本。
一定要注意版本之间的兼容。


ub.com/alibaba/spring-cloud-alibaba
springcolud alibaba版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
添加spring-cloud-alibaba-dependencies。
<properties>
<java.version>1.8</java.version>
<spring.cloud.version>2021.0.3</spring.cloud.version> <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<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>
3、Nacos
nacos github:https://github.com/alibaba/nacos/
nacos官方文档:https://nacos.io/zh-cn/
提供了分布式中的服务注册与发现和配置中心管理功能。
3.1、nacos安装
安装有很多方法:
1、从 最新稳定版本 下载 nacos-server-$version.zip 包。
2、通过docker管理。
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:v2.1.1
安装成功后访问,http://localhost:8848/nacos/#/login
默认账号密码:nacos

3.2、服务注册
1、引用依赖
<!--nacos服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、添加配置,开启注解
用application.properties或者使用application.yaml。
server.port=8081
spring.application.name=a-demo
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
在启动类上开启注解
// 开启服务注册
@EnableDiscoveryClient
@SpringBootApplication
public class ADemoApplication {
public static void main(String[] args) {
SpringApplication.run(ADemoApplication.class, args);
}
}
3.3、启动项目,在Nacos 控制台上看到已注册的服务

3.3、配置中心
从nacos引用配置,方便管理
1、引用依赖
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--解决版本太高了,无法读取bootstrap.yml文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2、添加配置
bootstrap.properties
采用bootstrap是因为优先级高。
spring.application.name=a-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
默认配置名:${spring.application.name}.properties
3、添加naocs配置,测试。

a-demo.properties


4、测试
@SpringBootApplication
@EnableDiscoveryClient
public class ADemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ADemoApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" +userName+"; age: "+userAge);
// SpringApplication.run(ADemoApplication.class, args);
}
}

3.4、配置yaml格式
配置中心可以配置yaml 格式
1、配置文件bootstrap.properties
spring.cloud.nacos.config.file-extension=yaml
2、在nacos上添加配置。

测试:

3.5、动态加载
1、默认是动态加载。
// 自动刷新配置,放在配置类上即可。
// @RefreshScope
3.6、命名空间
命名空间用于隔离不同用户的配置。
典型场景是不同环境的配置隔离,例如开发/测试环境和生产环境的隔离。
1、创建新的命名空间

2、使用新的命名空间

bootstrap.properties
spring.cloud.nacos.config.namespace=f11392fe-84e0-48a1-9da5-71052b6a3af1
在新命名空间,创建文件并测试

测试:

服务也可以注册到不同的命名空间上
spring.cloud.nacos.discovery.namespace=f11392fe-84e0-48a1-9da5-71052b6a3af1
3.7、GROUP分组
可以根据分组不同,选择不同的配置。
1、创建新的分组测试

bootstrap.properties
spring.cloud.nacos.config.group=DEV_GROUP
3.8、公共配置
存在一个配置,多个项目共用配置使用情况。
# 公共配置的 data-id,支持一个应用程序的多个配置,通过下标来指向。
spring.cloud.nacos.config.ext-config[0].data-id=config-common01.properties
# 指定分组,默认DEFAULT_GROUP(非必需)
spring.cloud.nacos.config.ext-config[0].group=GLOBALE_GROUP
# 开启动态配置(非必需)
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[n].data-id。n值越大,优先级越高。
更清晰表示多个项目与配置之间的关联,还可以:
# 多个数据 id,用逗号分隔
spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
# 指定动态更新配置
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties
数据Id必须有文件扩展名,可以是properties或者yaml/yml
4、Feign
用于服务与服务之间的调用
声明式,HTTP 形式的 API
例如,a服务调用b服务的接口。
服务都需要在nacos上注册。

4.1、添加依赖
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 负载均衡(不添加openfeign会报错) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
4.2、启动类添加注解
@EnableFeignClients
4.3、添加接口
1、添加调用接口
// 调用 b-demo 服务下的方法
@FeignClient(name = "b-demo")
public interface BdemoServcieFeignClient {
@GetMapping("/list")
String list();
}
2、添加服务的接口
b服务的controller
@RestController
public class IndexController {
@GetMapping("/list")
public String list(){
return "这是 B 服务的接口";
}
}
3、a服务调用b服务的接口
@RestController
public class IndexController {
@Autowired
BdemoServcieFeignClient bdemoServcieFeignClient;
@GetMapping("/list")
public String getConfig(){
String str = bdemoServcieFeignClient.list();
return "A服务+"+ str;
}
}
启动项目测试:

4.4、服务不在线时
如果在调用服务不在线,会报错。

后端控制台:

我们下次继续讲 Gateway 网关。
spring cloud alibaba 2021.0.1.0官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/2021/en-us/index.html#_introduction

浙公网安备 33010602011771号