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
本文作者:黎华扬
本文链接:https://www.cnblogs.com/galenblog/p/16662915.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步