SpringCloud 微服务学习(三)
- 5.6、@SentinelResource 注解的使用
- 服务网关 gateway
- 6.1、常见网关
- 6.2、Gateway 简介
- 6.3、自定义路由规则
- 6.4、过滤器 Filter
- 配置中心 Nacos Config
- 7.1、Nacos 配置中心的远程配置方式
- 7.1.1、引入 nacos-config 依赖
- 7.1.2、新建 bootstrap.yml配置文件,编写配置中心的连接信息
- 7.1.3、Nacos 配置中心的相关配置
- 7.1.4、配置动态刷新
- 7.1.5、配置共享
5.6、@SentinelResource 注解的使用
- 注解的作用:标识一个方法为资源
- 可以指定阻塞/异常时降级的方法
- 指定出现异常时的处理策略
服务网关 gateway
- 网关作为整个应用的唯一入口,如有请求都必须先经过网关,再请求到对应的微服务
- 网关作为微服务的统一入口,可以将针对所有微服务的通用操作封装在网关中,如认证/监控/限流/服务负载均衡/黑白名单
- 网关需要将自己的信息注册到注册中心上并且拉取其它微服务的信息,然后再调用的时候基于Ribbon实现负载均衡
6.1、常见网关
- Ngnix + lua:使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用
- kong:基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。
- Zuul:Netflflix开源的网关,功能丰富,使用JAVA开发,易于二次开发。
- Spring Cloud Gateway:Spring 公司为了替换 Zuul 而开发的网关服务,SpringCloud alibaba 技术栈中并没有提供自己的网关,可以采用 Spring Cloud Gateway 来做网关。
6.2、Gateway 简介
提供一种简单有效的统一的API路由管理方式,目标是代替 Zuul, 基于 Filter 链的方式提供了网关基本功能。如安全、监控和限流。
6.3、自定义路由规则
spring:
cloud:
gateway:
routes: # 网关路由配置
- id: product_route # 让 fateway 可以发现 nacos 中的微服务
uri: lb://product-service # 匹配路由规则后的访问地址,lb 代表负载均衡
predicates:
- Path=/prod/** # 匹配请求路径为/prod 开头的请求,全部转发到 uri 上
filters:
- StripPrefix=1 # 跳过第一个前缀,/prod/product/1 => /product/1
- id: order_route
uri: lb://order-service
predicates:
- Path=/ord/**
filters:
- StripPrefix=1
- id: 路由的唯一标识符
- uri:路由指向的地址,请求最终被转发的微服务
- order:排序,数值越小排序越靠前
- predicate:进行条件判断,只有断言返回true才会真正执行路由
- filter:用于修改请求和响应信息
网关的执行流程:
1、配置名字叫 TimeGatewayFilterFactory 的局部过滤器,并且设置内部类 Config 的参数值为 true
2、将配置类字节码对象交给父类,再执行完加载配置类参数(shortcuFieldOrder)的操作后,调用该字节码对象的属性进行设置值
3、获取到配置类的第一个值,配置到 Config 类的 show 属性中
4、返回一个局部网管对象,并且利用配置参数实现对应业务
5、得到配置类中的参数,判断是否需要统计耗时
6、如果不需要,直接放行进入下一个过滤器
7、如果需要,记录方法执行前的开始时间
8、执行下一个过滤器,并且绑定一个回调任务
9、当所有过滤器都执行完毕,并且代理服务的目标方法也执行完毕后,执行过滤器的后置(POST)处理逻辑
10、获取到前置存储的开始时间
11、当前时间 - 开始时间, 得到耗时,打印数据
6.4、过滤器 Filter
执行时期划分:
- PRE:请求路由之前调用。可实现身份验证、在集群中选择请求的微服务、记录调试信息等。
- POST:在路由到微服务以后执行,可用来为响应添加标准的HTTP Header、收集统计信息和指标、讲响应从微服务发送给客户端
按范围划分:
- GatewayFilter:应用到单个路由或者一个分组的路由上
- GlobalFilter:应用到所有的路由上
配置中心 Nacos Config
把项目中各种配置全部集中起来进行统一管理,并提供一套标准的接口,各个服务通过配置中心拉取自己的配置,配置中心更新时也会通知各个服务拉取同步最新信息。
7.1、Nacos 配置中心的远程配置方式
7.1.1、引入 nacos-config 依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
7.1.2、新建 bootstrap.yml配置文件,编写配置中心的连接信息
spring:
application:
name: product-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #nacos中心地址
file-extension: yaml # 配置文件格式
profiles:
active: dev # 环境标识
7.1.3、Nacos 配置中心的相关配置
- 在远程创建以【服务名称-环境.yaml】的配置文件
- 将原来 application.yml 中的内容抽取到该文件中
7.1.4、配置动态刷新
在需要刷新的配置类上贴 **@Re’freshScope **注解实现动态刷新
7.1.5、配置共享
- 同一服务的不同环境配置共享
- 将不同环境的通用配置抽取到【服务名.yaml】的文件中
- 其他不同环境的配置就继续保留在各环境的配置文件中
- 不同服务的同一环境配置共享
- 在 Nacos-Config 中创建通用配置
- 在需要用该配置文件的服务的 bootstrap.yml 中增加共享配置