Sentinel 实现网关限流(Spring-Gateway)

简介: Sentinel 不仅仅可以可以作用于服务之间,还可以完美的和服务网关 GateWay 或者 Zuul 一起使用来对网关实现流控。

Sentinel 不仅仅可以可以作用于服务之间,还可以完美的和服务网关 GateWay 或者 Zuul 一起使用来对网关实现流控。从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:


  • route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId。


  • 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组。


引入依赖


使用时需引入以下模块(以 Maven 为例):


<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>


YML 配置


需要配置 sentinel 的控制台地址,用来同步规则配置信息;还有就是需要配置 Nacos 来获取服务列表;还有就是配置服务网关的路由信息。


server:
  port: 2001
spring:
  application:
    name: gateway-service
  profiles:
    active: dev
  cloud:
    # 注册中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    # 流控配置
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
      # 降级策略
      scg:
        fallback:
          mode: response
          response-status: 426
          response-body: error request
    # 网关配置
    gateway:
          routes:
            - id: stock_route
              uri: lb://stock-service
              predicates:
                - Path=/stock/**


启动网关


在 API Gateway 端,用户只需要在原有启动参数的基础上添加如下启动参数即可标记应用为 API Gateway 类型:


-Dcsp.sentinel.app.type=1


配置流控规则


我们可以在 Sentinel 的管理后台对我们之前添加的 stock_route 增加流控规则配置, 如下图所示


image.png


访问服务过后我们可以看到,当前就会触发流控规则返回 error request 完成 Sentinel 和 GateWay 的整合


➜  curl http://127.0.0.1:2001/stock/hello
{"code":1,"message":"this is a success message","data":"hello"}%               ➜ curl http://127.0.0.1:2001/stock/hello
error request%  


总结


我们通过Sentinel 和 Gateway 的整合,我们可以轻松的设置一个服务集群,或者多个服务的访问入口流量控制。


此处只是简单的实现了错误信息的返回,对于自定义异常信息的处理,以及更多的生产复杂情况,我们更多的是和结合 Sentinel 本身提供的一些功能来响应实际问题,以及结合设计者的设计思想,我们可以通过修改源码或者在拓展点进行拓展来让 Sentinel 更好的服务于我们的生产。


参考


github.com/alibaba/Sen…


相关文章
|
13天前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
20天前
|
Java Sentinel Spring
spring boot 整合 sentinel
spring boot 整合 sentinel
12 1
|
1天前
|
应用服务中间件 nginx
Nginx如何作为前置网关进行限流
Nginx如何作为前置网关进行限流
|
8天前
|
Kubernetes 监控 Java
有了k8s还需要gateway网关,nacos配置中心吗
在Kubernetes环境中,服务网关(如Spring Cloud Gateway)和Nacos配置中心补充了k8s的不足。Nacos提供灵活服务路由和动态配置更新,超越k8s基础服务发现。它还支持更复杂的配置管理和实时推送,以及环境隔离和版本控制。作为服务注册中心,Nacos增强k8s服务治理能力,保持技术一致性,并提供额外的安全层及监控功能。
|
14天前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
17天前
|
网络协议 应用服务中间件 网络安全
[已解决]504 Gateway Time-out 网关超时
[已解决]504 Gateway Time-out 网关超时
15 0
|
23天前
|
Java API 开发者
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
26 0
|
25天前
|
Java Nacos 网络架构
Spring Cloud gateway 网关四 动态路由
Spring Cloud gateway 网关四 动态路由
|
26天前
|
微服务
springCloud之路由网关gateway
springCloud之路由网关gateway
15 0
|
27天前
|
监控 Java API
5.Gateway之限流、熔断
5.Gateway之限流、熔断
14 0