springcloud-gateway-sentinel整合避坑

2021-01-23  本文已影响0人  nicohuhu
第一步:导入依赖

工程搭建参考上一节gateway入门,sentinel也是在此基础上搭建的。

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
第二步:配置yml
server:
  port: 9999
spring:
  application:
    name: sentinel-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        dashboard: localhost:8080  #sentinel的图形化界面访问路径
      scg:
        fallback:   #服务降级返回的响应结果
          mode: reponse
          response-status: 426
          response-body: error request
    gateway:
      discovery:
        locator:
          enabled: false   #开启表示根据微服务名称映射,就是微服务名称拼接到url中可以直接访问,但是不推荐这么使用 容易暴露微服务
#      enabled: false  #默认开启网关true,关闭网关false
第三步:启动网关

此时启动网关后我们就完成整合了,但是如何使用呢。

第四步:如何使用sentinel限流

首先下载sentinel dashboard监控管理页面的jar包,官网下载https://github.com/alibaba/Sentinel/releases/tag/v1.8.0,我这里使用v1.7版本

image.png

在cmd中运行java -jar D:\software\sentinel-dashboard-1.7.0后面跟上你的文件路径,可能会出错


image.png

我运行1.6jar包直接报错,更换1.7jar包后运行正常,一旦运行成功后,关闭后再次运行也会出错,所以我右击打开方式,选择Java(TM) Platform SE binary运行,任务管理器就会有这个服务,总之就是要运行编译这个jar包服务


image.png

然后访问是可以的账号密码都是sentinel,登录


image.png
一片空白
image.png

此时网关已经启动,我们随便掉一个接口返回成功即可,因为sentinel是懒加载的,需要请求来触发它。


image.png

此时就有了网关服务


image.png

用route id方式配置限流规则


image.png
image.png

其中order-center为yml中 routes的id,表示对这个微服务进行限流

spring:
  cloud:
    gateway:
      routes:
       - id: order-center #id必须要唯一
         uri: lb://order-center
         predicates:
          - Path=/order/**
       - id: product-center #id必须要唯一
         uri: lb://product-center
         #谓词工厂
         predicates:
           - Path=/product/**   #先匹配断言 然后追加或省略前缀

我们网页发起请求,点击请求一次,请求成功


image.png

我们一秒快速点击发起多次请求


image.png

请求太多会失败,每秒只允许一个请求,返回我们定义的降级状态码426


image.png

用api分组方式配置限流
先创建分组


image.png

然后这里就有了分组选择项


image.png
image.png
快速发起多次请求效果是一样的
image.png

总结:一旦项目重启sentinel中我们的这些配置都将消失,因为没有持久化,以上就是sentinel整合网关的简单应用。

上一篇下一篇

猜你喜欢

热点阅读