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