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…


相关文章
|
8月前
|
存储 缓存 负载均衡
Gateway 网关坑我! 被这个404 问题折腾了一年?
小富分享了一个困扰团队一年多的 SpringCloud Gateway 路由 404 问题。通过日志追踪和源码分析,发现是网关在 Nacos 配置更新后未能正确清理旧的路由权重缓存,导致负载均衡时仍使用已删除的路由数据。最终通过监听路由刷新事件并手动更新缓存,成功解决了问题。
1236 125
Gateway 网关坑我! 被这个404 问题折腾了一年?
|
7月前
|
机器学习/深度学习 Kubernetes API
【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法
在Azure API Management中,通过配置trace策略可完整记录API请求的Header和Body信息。在Inbound和Outbound策略中分别使用context.Request/Response.Headers和Body.As&lt;string&gt;方法捕获数据,并写入Trace日志,便于排查与审计。
240 8
|
人工智能 Cloud Native 安全
DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集
诚挚地感谢每一位持续关注并使用 Higress 和 Spring AI Alibaba 的朋友,DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集中。
1057 118
|
9月前
|
安全 虚拟化
Omnissa Secure Email Gateway 2.33 - 电子邮件网关
Omnissa Secure Email Gateway 2.33 - 电子邮件网关
194 0
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
433 1
Gateway服务网关
|
XML Java 数据格式
如何使用 Spring Cloud 实现网关
如何使用 Spring Cloud 实现网关
583 3
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
1063 5
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
982 0
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway
|
负载均衡 Java 应用服务中间件
Gateway服务网关
本节针对微服务中另一重要组件:网关 进行了实战性演练,网关作为分布式架构中的重要中间件,不仅承担着路由分发(重点关注Path规则配置),同时可根据自身负载均衡策略,对多个注册服务实例进行均衡调用。本节我们借助GateWay实现的网关只是技术实现的方案之一,后续大家可能会接触像:Zuul、Kong等,其实现细节或有差异,但整体目标是一致的。

热门文章

最新文章