nacos 注册服务代码
- 改POM (加入依赖) spring-cloud-starter-alibaba-nacos-discovery
- 写YML 配置服务名和Nacos地址(spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # Nacos 地址) (配置注册中心地址)
- 主启动 @EnableDiscoveryClient //让注册中心能扫描到服务。 * (开启服务扫描)
- 业务类 , 控制层下面,@RefreshScope (支持Nacos的动态刷新)
nacos使用RestTemplate实现服务调用
- 注册RestTemplate并添加@LoadBalanced
- 使用RestTemplate访问, restTemplate.getForObject(serverURL)
OpenFeign代码实现
- 1 pom,引入OpenFeign依赖
- 2 声明式接口 @FeignClient (服务名) FeignService(方法和controller层的方法定义保持一致) (注册OpenFeign接口)
- 3 主启动, @EnableFeignClients,(扫描OpenFeign接口)
- 4 调用本地方法一样调用远程方法 (注入FeignService)
OpenFeign日志
- NONE:默认的,不显示任何日志;
- BASIC:仅记录请求方法、URL、响应状态码及执行时间;
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
- FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据;
配置文件
- logging.level.com.qt.serviceopenfeign.openfeign=debug #全局
- feign.client.config.service-stock.loggerLevel=basic #局部
Ribbon的常用配置
ribbon:
ConnectTimeout: 1000 #服务请求连接超时时间(毫秒)
ReadTimeout: 3000 #服务请求处理超时时间(毫秒)
OkToRetryOnAllOperations: true #对超时请求启用重试机制
MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
MaxAutoRetries: 1 # 切换实例后重试最大次数
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #修改负载均衡算法
nacos配置中心
- 改POM (加入依赖) spring-cloud-starter-alibaba-nacos-config
- 写YML (配置文件,bootstrap) spring.cloud.nacos.config.server-addr=127.0.0.1:8848 (配置配置中心地址)
- 建配置
- 使用@Value("$name")获取配置
- 业务类 , 控制层下面,@RefreshScope //动态刷新配置
配置文件优先级
- bootstrap优先加载,配置中心配置,当前应用配置
Nacos配置中心使用:
- bootstrap-{profile} 区分环境,不同环境nacos地址不同
- 创建配置文件:(文件名为服务名),${prefix}-${spring.profiles.active}.${file-extension}prefix 默认为 spring.application.name
配置
- 配置命名空间(或分组)区分项目(应用) (命名空间(或分组)隔离配置)
- shared-configs读取共享配置(redis,mq,数据库)
- extension-config 读取额外配置(数据库),并覆盖共享配置
sentinel代码实现
- 改POM (加入依赖) spring-cloud-starter-alibaba-sentinel
- 写YML (配置文件) spring.cloud.sentinel.transport.port=127.0.0.1:8080#配置Sentinel dashboard地址
@SentinelResource配置 (服务提供者)
- 指定资源名(也可以用请求路径作为资源名),降级处理方法的。
- blockHandler 设置流控降级处理方法,降级处理方法一定要public并且返回值相同
- fallback 设置异常降级处理方法
- blockHandlerClass 设置流控降级处理类,fallbackClass 设置异常处理类
统一异常处理
- 实现 BlockExceptionHandler的hand方法
- 适合统一返回结果的场景
流控效果:
- 快速失败:当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。
- warm up:根据codeFactor(冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值
- 排队等待: 方式会严格控制请求通过的间隔时间,即让请求以均匀的速度通过,对应的是漏桶算法
熔断降级 ,(RT和异常数必须满足1秒5个请求)
- RT(平均响应时间,秒级),QPS>=5且平均响应时间 超出阈值 ,触发降级。降级时间结束,关闭降级
- 异常比例(秒级),QPS>=5且异常比例(秒级统计)超过阈值,触发降级,降级时间结束后,关闭降级
- 异常数(分钟级),异常数(分钟统计)超过阈值时,触发降级;降级时间结束,关闭降级
sentinel整合openfeign+fallback进行降级 (服务调用者)
- 改POM (加入依赖) :spring-cloud-starter-openfeign
- 写YML (配置文件)feign.sentinel.enabled=true
- 主启动类:@EnableFeignClients
- 远程调用模块的接口A,@FeignClient(name = "service-stock",fallback = B.class)
- 降级类B实现接口A方法
seata模块
- 改POM (加入依赖) spring-cloud-starter-alibaba-seata
- 写YML (配置文件)spring: cloud:alibaba: seata: tx-service-group: fsp_tx_group #自定义事务组名称需要与seata-server中的对应
- 声明式事务实现(@GlobalTransactional)
Gateway 网关快速入门
- 前提:注册到Nacos(Nacos依赖,Nacos配置,@EnableDiscoveryClient )
- 引入网关依赖:starter-gateway
- 引入common,引入数据库配置需要移除 (@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}))
- yml配置
路由配置 cloud: gateway: routes:
- id: 唯一标识。默认是一个UUID
- uri: lb://service-openfeign 需要转发路径
- predicates: 断言, 路径的匹配规则
- filters: 过滤器
predicates: 断言为Path=/goods/** ,uri=http://localhost:8001/
- 请求http://127.0.0.1/goods/findOne/2,匹配/goods/**,
- 拼接/goods/**和uri=http://localhost:8001/,最终url=http://localhost:8001/goods/**
predicates: 断言为Host=mall.com
- 请求http://mall.com,匹配 Host=mall.com
网关路由
- 转发路径 uri: lb://service-openfeign
- 匹配路径 predicates Path=/goods/** 请求http://127.0.0.1/goods/findOne/2,匹配/goods/**
- 重写路径 filters RewritePath api替换为renren-fast/