Spring Cloud Alibaba一站式方案
- Nacos:服务发现/注册,配置中心
- Ribbon:负载均衡
- Feign:声明式HTTP客户端(调用远程服务)
- Sentinel:服务容错(限流,降级,熔断)
- Gateway:API网关(webflux编程模式)
- Sleuth:调用链监控
- Seata:分布式事务解决方案
Nacos
官网:https://nacos.io/zh-cn/docs/quick-start.html
Nacos注册中心下载(Nacos服务器是个jar包,可以使用sh或cmd命令运行)
应用application.yml配置Nacos Server地址
spring.cloud.nacos.discovery.server-addr=xxx:xx
@EnableDiscoveryClient
- 访问
http://192.168.186.1:8848/nacos/index.html
即可,默认账号密码都是nacos
Feign
声明式HTTP客户端,整合了Ribbon(负载均衡)和Hystrix(服务熔断)
引入OpenFeign(这个用的不是阿里的)
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>编写一个接口,告诉SpringCloud这个接口需要调用远程服务
1
2
3
4
5
6@FeignClient("gulimall-coupon") // nacos服务名
public interface CouponFeignService {
// 方法签名必须与远程的接口服务一致
@RequestMapping("/coupon/coupon/member/list")
R membercoupons();
}开启远程调用功能
1
2
3@EnableFeignClients(basePackages = "com.mkl.gulimall.member.feign")
public class GulimallMemberApplication {
...
Nacos配置中心
添加依赖
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据
1
2spring.application.name=nacos-config-example # 这里填的是应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848更多配置项:
在Nacos中添加配置
需要注意的是:Data ID必须是
${prefix}-${spring.profiles.active}.${file-extension}
${prefix}
: 默认spring.application.name
${spring.profiles.active}
:即为当前环境对应的 profile,由spring.profiles.active
指定${file-extension}
: 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置(默认是properties,可以指定为yml)- 基于此,可以创建
{applicationName}-dev.properties
,{applicationName}-st.yml
,{applicationName}-uat.properties
等配置文件,然后在bootstrap.properties中指定环境即可(spring.profiles.active=dev
) - 上述内容官方文档都有,且更详细
动态刷新:给对应Bean添加
@RefreshScope
+@Value
或@ConfigurationProperties
注解例子:
1 | # 配置文件设置对应的值 ${} 表示从配置文件取 |
命名空间
可以给配置文件添加命名空间
命名空间可以按照微服务维度去创建,不同微服务都有自己的命名空间,然后在对应微服务的bootstrap.properties指定spring.cloud.nacos.config.namespace=命名空间对应的UUID(在Nacos中命名空间栏可以看到)
配置分组
配置分组:group
默认为 DEFAULT_GROUP
,可以在Nacos添加配置文件时指定配置分组,通过bootstrap.properties的 spring.cloud.nacos.config.group
配置,可以用于区分环境(dev,st,uat,prod等)
多配置集
配置中心中同时加载多配置集:如数据源配置,框架相关配置,微服务相关配置等,在nacos创建对应的配置文件,data-id和group对应即可(需要注意必须在指定命名空间下)
1 | spring.cloud.nacos.config.ext-config[0].data-id=mybatis.yml |
Gateway
网关:作为流量入口,提供包括路由转发,权限校验,限流控制等功能
gateway需要作为一个应用启动,同样需要注册进服务中心,过程略
引入gateway
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>设置路由
1
2
3
4
5
6
7
8
9
10
11
12
13
14spring:
cloud:
gateway:
routes:
# 当访问localhost:80/?url=baidu的时候,会路由到https://www.baidu.com
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url, baidu
# 当访问localhost:80/?url=qq的时候,会路由到https://www.qq.com
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url, qqTODO:更多路由规则