auto-Spring Cloud Alibaba-图灵笔记
2022-09-01 20:32:13 0 举报
AI智能生成
Spring Cloud Alibaba-图灵笔记
作者其他创作
大纲/内容
微服务安全Oauth2
分布式链路跟踪Skywalking
官方文档
未完待续。。。
微服务网关gateway
官方文档
核心概念
路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。
断言(predicates)
Java8中的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。
过滤器(Filter)
SpringCloud Gateway中的filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。
Spring Cloud Gateway快速开始
环境搭建
引入依赖
注意:会和spring-webmvc的依赖冲突,需要排除spring-webmvc
编写yml配置文件
路由断言工厂(Route Predicate Factories)配置
时间匹配
The After Route Predicate Factory
The Before Route Predicate Factory
The Before Route Predicate Factory
The Cookie Route Predicate Factory
The Header Route Predicate Factory
The Host Route Predicate Factory
The Method Route Predicate Factory
The Path Route Predicate Factory
The Query Route Predicate Factory
The RemoteAddr Route Predicate Factory
The Weight Route Predicate Factory
自定义路由断言工厂
自定义路由断言工厂需要继承 AbstractRoutePredicateFactory 类,重写 apply 方法的逻辑。
yml中配置
过滤器工厂( GatewayFilter Factories)配置
The AddRequestHeader GatewayFilter Factory
The AddRequestParameter GatewayFilter Factory
The AddResponseHeader GatewayFilter Factory
The DedupeResponseHeader GatewayFilter Factory
......
The PrefixPath GatewayFilter Factory
The SetStatus GatewayFilter Factory
The RedirectTo GatewayFilter Factory
The RemoveRequestHeader GatewayFilter Factory
......
自定义过滤器工厂
继承AbstractNameValueGatewayFilterFactory且我们的自定义名称必须要以GatewayFilterFactory结尾并交给spring管理。
配置自定义的过滤器工厂
全局过滤器(Global Filters)配置
The LoadBalancerClient Filter
The LoadBalancerClient Filter
The ReactiveLoadBalancerClientFilter
The Netty Routing Filter
The Netty Write Response Filter
The RouteToRequestUrl Filter
The Websocket Routing Filter
The Gateway Metrics Filter
自定义全局过滤器
Gateway跨域问题
通过yml配置的方式
通过java配置的方式
Gateway高可用配置
gateway整合sentinel限流
快速开始
引入依赖
使用时只需注入对应的 SentinelGatewayFilter 实例以及 SentinelGatewayBlockExceptionHandler 实例即可
用户可以通过 GatewayRuleManager.loadRules(rules) 手动加载网关规则
接入Sentinel dashboard控制台
添加yml配置
分布式事务组件Seata
分布式事务详解
Seata的三大角色
TC (Transaction Coordinator) - 事务协调者
TM (Transaction Manager) - 事务管理器
RM (Resource Manager) - 资源管理器
Seata快速开始
Seata Server(TC)环境搭建
Seata Client快速开始
编程式事务实现(GlobalTransaction API)
声明式事务实现(@GlobalTransactional)
多数据源场景
接入微服务应用
restTemplate模式Demo
dubbo模式Demo
feign模式Demo
限流容错降级组件Setinel
Sentinel基本概念
资源
规则
Sentinel资源保护的方式
API实现
引入依赖,pom
流控实现逻辑,定义资源和流控规则
@SentinelResource注解实现
pom
配置切面支持
UserController中编写测试逻辑,添加@SentinelResource,并配置blockHandler和fallback
编写ExceptionUtil,注意如果指定了class,方法必须是static方法
流控规则设置可以通过Sentinel dashboard配置
客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信。
启动Sentinel控制台
Sentinel整合应用
Spring Cloud 整合Sentinel
pom
暴露/actuator/sentinel端点,并设置sentinel控制台地址
测试
在sentinel控制台中设置流控规则
RestTemplate整合Sentinel
pom
RestTemplate添加@SentinelRestTemplate注解
异常处理类定义需要注意的是该方法的参数跟返回值跟 org.springframework.http.client.ClientHttpRequestInterceptor#interceptor 方法一致,其中参数多出了一个 BlockException 参数用于获取 Sentinel 捕获的异常。
添加yml配置
OpenFeign整合Sentinel
pom
配置文件打开 Sentinel 对 Feign 的支持:feign.sentinel.enabled=true
在Feign的声明式接口上添加fallback属性
或者添加fallbackFactory属性
Dubbo整合Sentinel
pom
consumer端和provider端的yml配置文件接入sentinel配置
限流粒度可以是服务接口和服务方法两种粒度
Sentinel Dubbo Adapter 支持配置全局的 fallback 函数
provider端
consumer端
Sentinel控制台规则配置详解
实时监控
监控接口的通过的QPS和拒绝的QPS
簇点链路
用来显示微服务的所监控的API
流控规则
限流阈值类型
QPS
并发线程数
流控模式
直接
关联
链路
注意,高版本此功能直接使用不生效,如何解决?
1.8.0 需要引入sentinel-web-servlet依赖
添加配置类,配置CommonFilter过滤器,指定WEB_CONTEXT_UNIFY=false,禁止收敛URL的入口context
引入CommonFilter,如果有自定义BlockException处理逻辑,需要实现UrlBlockHandler接口
流控效果
快速失败
预热(Warm Up)
匀速排队
降级规则
熔断策略
慢调用比例
异常比例
异常数
注意异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效。
热点参数限流
注意:1. 热点规则需要使用@SentinelResource("resourceName")注解,否则不生效 2. 参数必须是7种基本数据类型才会生效
系统规则
授权控制
规则配置
没有引入CommonFilter的实现
实现com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser接口,在parseOrigin方法中区分来源,并交给spring管理
引入CommonFilter的实现
第一步:实现com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser接口,在接口方法中实现区分来源
第二步:将RequestOriginParser实现类交给WebCallbackManager管理
Sentinel动态规则扩展
通过 API 直接修改 (`loadRules`)
通过 `DataSource` 适配不同数据源修改
拉模式
基于文件的数据源实现
pom
FileRefreshableDataSource 会周期性的读取文件以获取规则,当文件有更新时会及时发现,并将规则更新到内存中。
FlowRule.json数据
推模式
基于Nacos配置实现
Java API
pom
核心代码
yml配置方式
pom
yml中配置
nacos配置中心中添加
Sentinel规则持久化
拉模式改造
实现InitFunc接口,在init中处理DataSource初始化逻辑,并利用spi机制实现加载。
推模式改造
基于Nacos配置中心控制台实现推送
配置中心控制台 → 配置中心 → Sentinel 数据源 → Sentinel
基于Sentinel控制台实现推送
Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel
改造Sentinel dashboard控制台
微服务配置中心Nacos
Spring Cloud Alibaba整合Nacos Config
pom
添加bootstrap.properties
测试
配置中心准备配置
测试微服务是否使用配置中心的配置
Config相关配置
支持配置的动态更新
测试
支持profile粒度的配置
支持自定义 namespace 的配置
支持自定义 Group 的配置
支持自定义扩展的 Data Id 配置
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
配置的优先级
优先级从高到低
@RefreshScope
微服务调用组件dubbo
Spring Cloud整合Dubbo
provider端配置
pom
application.yml
服务实现类上配置@DubboService暴露服务
consumer端配置
pom
application.yml
服务消费方通过@DubboReference引入服务
从Open Feign迁移到Dubbo
修改服务提供者
服务消费端引入依赖
pom
feign接口添加 @DubboTransported 注解
调用对象添加 @DubboTransported 注解
微服务调用组件Feign
优势
Spring Cloud Alibaba快速整合Feign
添加spring-cloud-starter-openfeign依赖
pom
编写调用接口+@FeignClient注解
调用端在启动类上添加@EnableFeignClients注解
发起调用,像调用本地方式一样调用远程服务
提示: Feign 的继承特性可以让服务的接口定义单独抽出来,作为公共的依赖,以方便使用。
Spring Cloud Feign的自定义配置及使用
日志配置
定义一个配置类,指定日志级别
全局配置
局部配置方式1
局部配置方式2
在yml配置文件中执行 Client 的日志级别才能正常输出日志,格式是"logging.level.feign接口包路径=debug"
契约配置
修改契约配置,支持Feign原生的注解
注意:修改契约配置后,OrderFeignService 不再支持springmvc的注解,需要使用Feign原生的注解
OrderFeignService 中配置使用Feign原生的注解
局部配置
也可以通过yml配置契约
通过拦截器实现认证
Feign 中我们可以直接配置 Basic 认证
扩展点: feign.RequestInterceptor
自定义拦截器实现认证逻辑
全局配置
局部配置
yml中配置
超时时间配置
全局配置
局部配置
yml中配置
客户端组件配置
配置Apache HttpClient
pom
修改yml配置,将 Feign 的 Apache HttpClient启用
测试:调用会进入feign.httpclient.ApacheHttpClient#execute
配置 OkHttp
pom
修改yml配置,将 Feign 的 HttpClient 禁用,启用 OkHttp
测试:调用会进入feign.okhttp.OkHttpClient#execute
GZIP 压缩配置
注意:只有当 Feign 的 Http Client 不是 okhttp3 的时候,压缩才会生效,配置源码在FeignAcceptGzipEncodingAutoConfiguration
编码器解码器配置
扩展点:Encoder & Decoder
Java配置方式
yml配置方式
微服务客户端负载均衡器LoadBalancer
RestTemplate整合LoadBalancer
引入依赖 pom
注意:nacos-discovery中引入了ribbon,需要移除ribbon的包
如果不移除,也可以在yml中配置不使用ribbon
如果不移除,也可以在yml中配置不使用ribbon
修改application.yml
使用@LoadBalanced注解配置RestTemplate
使用
WebClient整合LoadBalancer
引入依赖 pom
配置WebClient作为负载均衡器的client
使用
引入webflux
微服务客户端负载均衡器Ribbon
Spring Cloud整合Ribbon
添加spring-cloud-starter-netflix-ribbon依赖
pom
添加@LoadBalanced注解
修改调用逻辑
Ribbon更多配置
修改默认负载均衡策略
Ribbon负载均衡策略
全局配置:调用其他微服务,一律使用指定的负载均衡算法
局部配置:调用指定微服务提供的服务时,使用对应的负载均衡算法
修改application.yml
自定义负载均衡策略
通过实现 IRule 接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。
实现基于Nacos权重的负载均衡策略
配置自定义的策略
全局配置
局部配置
修改application.yml
饥饿加载
开启饥饿加载,解决第一次调用慢的问题
服务注册与发现Nacos
Nacos Server注册中心安装
Nacos Client之服务提供者注册
添加pring-cloud-starter-alibaba-nacos-discovery依赖
pom
修改application.yml
主启动类添加@EnableDiscoveryClient
Nacos Client之服务消费者注册
添加spring-cloud-starter-alibaba-nacos-discovery依赖
pom
修改application.yml
主启动类添加@EnableDiscoveryClient
测试微服务调用
http://localhost:8040/user/findOrderByUserId/1
配置客户端负载均衡器实现微服务调用
RestTemplate 添加@LoadBalanced注解
使用RestTemplate进行服务调用
Nacos sidecar异构微服务注册
异构微服务(可以是Python,go等其他语言实现)
实现/health接口,返回{status: "UP"}
Java实现sidecar应用,用于异构微服务注册到nacos
pom
application.yml
微服架构介绍
微服务VS单体架构
微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是微服务。
微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
微服务技术栈
服务注册与发现
Spring Cloud Netflix Eureka
Spring Cloud Consul
Spring Cloud Zookeeper
Spring Cloud Alibaba Nacos
服务调用
客户端负载均衡器
Spring Cloud Netflix Ribbon
Spring Cloud LoadBalancer
RPC调用
Spring Cloud OpenFeign
Dubbo
服务限流熔断降级
Spring Cloud Netflix Hystrix
Spring Cloud Alibaba Sentinel
配置中心
Spring Cloud Config
Spring Cloud Zookeeper
Spring Cloud Alibaba Nacos
服务网关
Spring Cloud Netflix Zuul
Spring Cloud Gateway
分布式事务
Spring Cloud Alibaba Seata
服务链路跟踪
Spring Cloud Sleuth+Zipkin
Skywalking
服务安全
Spring Cloud Security
分布式消息
Spring Cloud Stream
RabbitMQ
Kafka
RocketMQ
Spring Cloud Alibaba&Spring Boot版本选型
版本选择: Spring Cloud Alibaba 2.2.5.RELEASE
聚合工程父pom
Spring Cloud Alibaba官方文档
0 条评论
下一页