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/