Spring Cloud Alibaba
官网:https://spring.io/projects/spring-cloud-alibaba
gitHub:https://github.com/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上注册。
1、添加依赖openfeign
<!-- 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>
2、启动类添加注解
@EnableFeignClients
3、添加接口
@FeignClient(name = "b-demo")
public interface BdemoServcieFeignClient {@GetMapping("/list")String list();
}
4、b服务的controller
@RestController
public class IndexController {@GetMapping("/list")public String list(){return "这是 B 服务的接口";}
}
5、调用b服务的接口
@RestController
public class IndexController {@AutowiredBdemoServcieFeignClient bdemoServcieFeignClient;@GetMapping("/list")public String getConfig(){String str = bdemoServcieFeignClient.list();return "A服务+"+ str;}
}
启动项目测试:
我们下次继续讲 Gateway
网关。
spring cloud alibaba 2021.0.1.0
官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/2021/en-us/index.html#_introduction