简单使用nacos、openFeign和Sentinel(建议看源码和截图一起看)

1、Nacos

1、下载nacos,可以从结尾获取压缩包和源码

2、下方图例是两个服务程序注册成功到注册中心,并且配置从配置中心拉取,成功访问数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、nacos中配置项里的内容

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: "jdbc:mysql://127.0.0.1:3306/train?characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
    username: root
    password: ...
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher


mybatis-plus:
  mapper-locations: classpath*:/mapper/*Mapper.xml
  type-aliases-package: com.fs.train.po
  configuration:
    map-underscore-to-camel-case: true

logging:
  level:
    com.fs.train: debug

swagger:
  enable: true

#数据中台HRestful API请求
feign:
  client:
    config:
      default:
        #日志打印级别
        loggerLevel: basic
        #跨服务接口请求超时
        readTimeout: 20000
        #跨服务请求连接超时
        connectTimeout: 20000



2、openFeign

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、Sentinel

(1)从官网下载 jar 包 下载地址 (或者结尾地址去拿但和你版本不一定匹配)https://github.com/alibaba/Sentinel/releases

首先寻找合适的版本 可以参考 阿里官方的版本对应 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

我的是这个版本
在这里插入图片描述
在这里插入图片描述
(2)启动

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

在这里插入图片描述
在这里插入图片描述
账号/密码: sentinel/sentinel

(3)结合SpringBoot配置,并开启规则持久化

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!--        独立引入如下依赖,来申明 sentinel 的规则数据存储在 nacos 中。-->
<dependency>  
 <groupId>com.alibaba.csp</groupId>  
 <artifactId>sentinel-datasource-nacos</artifactId> 
</dependency>

bootstrap.yml

server:
  port: 9001
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: c93d6194-9008-4c77-a0b0-e36db74e438e
      config:
        server-addr: localhost:8848
        namespace: c93d6194-9008-4c77-a0b0-e36db74e438e
        file-extension: yaml #指定配置格式
    sentinel:
      transport:
        port: 9003
        dashboard: localhost:9003
      datasource:
        # 名称随意
        flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${
    
    spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow
        degrade:
          nacos:
            server-addr: localhost:8848
            dataId: ${
    
    spring.application.name}-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
        system:
          nacos:
            server-addr: localhost:8848
            dataId: ${
    
    spring.application.name}-system-rules
            groupId: SENTINEL_GROUP
            rule-type: system
        authority:
          nacos:
            server-addr: localhost:8848
            dataId: ${
    
    spring.application.name}-authority-rules
            groupId: SENTINEL_GROUP
            rule-type: authority
  application:
    name: ncop-service-provider
  profiles:
    active: dev

注意:
亲测使用了改造后的sentinel包,配置sentinel.datasource下规则的namescape和data-type无效!!!不能配置这两玩意

nacos配置中心的流控规则

[
  {
    
    
    // 资源名
    "resource": "testBlockHandler",
    // 针对来源,若为 default 则不区分调用来源
    "limitApp": "default",
    // 限流阈值类型(1:QPS;0:并发线程数)
    "grade": 1,
    // 阈值
    "count": 2,
    // 是否是集群模式
    "clusterMode": false,
    // 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)
    "controlBehavior": 0,
    // 流控模式(0:直接;1:关联;2:链路)
    "strategy": 0,
    // 预热时间(秒,预热模式需要此参数)
    "warmUpPeriodSec": 10,
    // 超时时间(排队等待模式需要此参数)
    "maxQueueingTimeMs": 500,
    // 关联资源、入口资源(关联、链路模式)
    "refResource": "rrr"
  }
]

(4)流量控制

    @SentinelResource(value = "testBlockHandler", blockHandler = "blockHandler")
    @GetMapping("/getList")
    public String getList(){
    
    
        return "hello,我来啦";
    }

    public String blockHandler(BlockException t){
    
    
        return "不是,你谁啊!!!!";
    }

注意:
1、流控要用blockHandler = “。。”来标注
2、流控方法的返回类型和参数类型要和原函数相同,并且参数还要加也该BlockException

官方文档
在这里插入图片描述

4、代码和安装包

https://gitee.com/truth123/train-for-spring-cloud-alibaba

猜你喜欢

转载自blog.csdn.net/weixin_42835230/article/details/131130078