news 2026/5/4 19:38:34

Sentinel 开源框架适配说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sentinel 开源框架适配说明

开源框架适配

  • 云原生微服务体系
    • Spring Boot/Spring Cloud
    • Quarkus
  • Web 适配
    • Web Servlet
    • Spring Web
    • Spring WebFlux
    • JAX-RS (Java EE)
  • RPC 适配
    • Apache Dubbo
    • gRPC
    • Feign
    • SOFARPC
  • HTTP client 适配
    • Apache HttpClient
    • OkHttp
  • Reactive 适配
    • Reactor
  • API Gateway 适配
    • Spring Cloud Gateway
    • Netflix Zuul 1.x
    • Netflix Zuul 2.x
  • Apache RocketMQ

注:适配模块仅提供相应适配功能,若希望接入 Sentinel 控制台,请务必参考 Sentinel 控制台文档。

云原生微服务体系

Spring Cloud

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。Sentinel 与 Spring Boot/Spring Cloud 的整合见 Sentinel Spring Cloud Starter。

Spring Cloud Alibaba 默认为 Sentinel 整合了 Servlet、RestTemplate、FeignClient 和 Spring WebFlux。Sentinel 在 Spring Cloud 生态中,不仅补全了 Hystrix 在 Servlet 和 RestTemplate 这一块的空白,而且还完全兼容了 Hystrix 在 FeignClient 中限流降级的用法,并且支持运行时灵活地配置和调整限流降级规则。

Spring Cloud Alibaba Sentinel 的示例可以参考 sentinel-guide-spring-cloud

Quarkus

注:从 1.8.0 版本开始支持,需要 Java 8 及以上版本。

Sentinel 提供针对 Quarkus 微服务的适配模块(支持 native image),可以很方便地将 JAX-RS Web 服务接入并进行高可用防护,同时支持注解方式自定义埋点(基于 CDI)。

相关模块:

  • sentinel-jax-rs-quarkus-adapter
  • sentinel-annotation-quarkus-adapter

Web 适配

Web Servlet

Sentinel 提供针对 Servlet 的原生整合,可以对 Web 请求进行流量控制。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId><version>x.y.z</version></dependency>

您只需要在 Web 容器中的web.xml配置文件中进行如下配置即可开启 Sentinel 支持:

<filter><filter-name>SentinelCommonFilter</filter-name><filter-class>com.alibaba.csp.sentinel.adapter.servlet.CommonFilter</filter-class></filter><filter-mapping><filter-name>SentinelCommonFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

若是 Spring 应用可以通过 Spring 进行配置,例如:

@ConfigurationpublicclassFilterConfig{@BeanpublicFilterRegistrationBeansentinelFilterRegistration(){FilterRegistrationBean<Filter>registration=newFilterRegistrationBean<>();registration.setFilter(newCommonFilter());registration.addUrlPatterns("/*");registration.setName("sentinelFilter");registration.setOrder(1);returnregistration;}}

接入 filter 之后,所有访问的 Web URL 就会被自动统计为 Sentinel 的资源,可以针对单个 URL 维度进行流控。若希望区分不同 HTTP Method,可以将HTTP_METHOD_SPECIFY这个 init parameter 设为 true,给每个 URL 资源加上前缀,比如GET:/foo

限流处理逻辑:默认情况下,当请求被限流时会返回默认的提示页面Blocked by Sentinel (flow limiting)。您也可以通过 JVM 参数-Dcsp.sentinel.web.servlet.block.page或代码中调用WebServletConfig.setBlockPage(blockPage)方法设定自定义的跳转 URL,当请求被限流时会自动跳转至设定好的 URL。同样您也可以实现UrlBlockHandler接口并编写定制化的限流处理逻辑,然后将其注册至WebCallbackManager中。

提示:1.7.0 版本开始默认的限流页面 HTTP 返回码是429。您可以通过csp.sentinel.web.servlet.block.status配置项自定义限流页面的 HTTP 状态码。

按来源限流:若希望对 HTTP 请求按照来源限流,则可以自己实现RequestOriginParser接口从 HTTP 请求中解析 origin 并注册至WebCallbackManager中。注意来源数目不能太多,若太多请自定义埋点作为参数传入并使用热点规则。

注意:Sentinel Web Filter 会将每个到来的不同的 URL 都作为不同的资源处理,因此对于 REST 风格的 API,需要自行实现UrlCleaner接口清洗一下资源(比如将满足/foo/:id的 URL 都归到/foo/*资源下),然后将其注册至WebCallbackManager中。否则会导致资源数量过多,超出资源数量阈值(目前是 6000)时多出的资源的规则将不会生效

从 1.6.3 版本开始,UrlCleaner还可以来过滤掉不希望统计的 URL,只需要在 UrlCleaner 中将不希望统计的 URL 转换成空字符串(“”)即可。示例:

WebCallbackManager.setUrlCleaner(newUrlCleaner(){@OverridepublicStringclean(StringoriginUrl){if(originUrl==null||originUrl.isEmpty()){returnoriginUrl;}// 比如将满足 /foo/{id} 的 URL 都归到 /foo/*if(originUrl.startsWith("/foo/")){return"/foo/*";}// 不希望统计 *.ico 的资源文件,可以将其转换为 empty string (since 1.6.3)if(originUrl.endsWith(".ico")){return"";}returnoriginUrl;}});

如果您正在使用 Spring Boot / Spring Cloud,那么可以通过引入 Spring Cloud Alibaba Sentinel 来更方便地整合 Sentinel,详情请见 Spring Cloud Alibaba 文档。

Spring WebFlux

注:从 1.5.0 版本开始支持,需要 Java 8 及以上版本。

Sentinel 提供与 Spring WebFlux 的整合模块,从而 Reactive Web 应用也可以利用 Sentinel 的流控降级来保障稳定性。该整合模块基于 Sentinel Reactor Adapter 实现。

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

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-webflux-adapter</artifactId><version>x.y.z</version></dependency>

使用时只需注入对应的SentinelWebFluxFilter实例以及SentinelBlockExceptionHandler实例即可。比如:

@ConfigurationpublicclassWebFluxConfig{privatefinalList<ViewResolver>viewResolvers;privatefinalServerCodecConfigurerserverCodecConfigurer;publicWebFluxConfig(ObjectProvider<List<ViewResolver>>viewResolversProvider,ServerCodecConfigurerserverCodecConfigurer){this.viewResolvers=viewResolversProvider.getIfAvailable(Collections::emptyList);this.serverCodecConfigurer=serverCodecConfigurer;}@Bean@Order(-1)publicSentinelBlockExceptionHandlersentinelBlockExceptionHandler(){// Register the block exception handler for Spring WebFlux.returnnewSentinelBlockExceptionHandler(viewResolvers,serverCodecConfigurer);}@Bean@Order(-1)publicSentinelWebFluxFiltersentinelWebFluxFilter(){// Register the Sentinel WebFlux filter.returnnewSentinelWebFluxFilter();}}

您可以在WebFluxCallbackManager注册回调进行定制:

  • setBlockHandler:注册函数用于实现自定义的逻辑处理被限流的请求,对应接口为BlockRequestHandler。默认实现为DefaultBlockRequestHandler,当被限流时会返回类似于下面的错误信息:Blocked by Sentinel: FlowException
  • setUrlCleaner:注册函数用于 Web 资源名的归一化。函数类型为(ServerWebExchange, String) → String,对应含义为(webExchange, originalUrl) → finalUrl
  • setRequestOriginParser:注册函数用于从请求中解析请求来源。函数类型为ServerWebExchange → String

相关示例:sentinel-demo-spring-webflux

JAX-RS (Java EE)

注:从 1.8.0 版本开始原生支持。若您的服务是 Spring Web 服务,可参考 Spring Web 适配文档接入。

sentinel-jax-rs-adapter

RPC 适配

Dubbo

Sentinel 提供 Dubbo 的相关适配 Sentinel Dubbo Adapter,主要包括针对 Service Provider 和 Service Consumer 实现的 Filter。相关模块:

  • sentinel-apache-dubbo3-adapter(兼容 Apache Dubbo 3.0.5 及以上版本,自 Sentinel 1.8.5 开始支持)
  • sentinel-apache-dubbo-adapter(兼容 Apache Dubbo 2.7.x 及以上版本,自 Sentinel 1.5.1 开始支持)
  • sentinel-dubbo-adapter(兼容 Dubbo 2.6.x 版本)

对于 Apache Dubbo3.0.5及以上版本,使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-dubbo3-adapter</artifactId><version>x.y.z</version></dependency>

对于 Apache Dubbo2.7.x及以上版本,使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-dubbo-adapter</artifactId><version>x.y.z</version></dependency>

对于 Dubbo2.6.x及以下版本,使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-dubbo-adapter</artifactId><version>x.y.z</version></dependency>

引入此依赖后,Dubbo 的服务接口和方法(包括调用端和服务端)就会成为 Sentinel 中的资源,在配置了规则后就可以自动享受到 Sentinel 的防护能力。

注:若希望接入 Dashboard,请参考 接入控制台的步骤。只引入 Sentinel Dubbo Adapter 无法接入控制台!

若不希望开启 Sentinel Dubbo Adapter 中的某个 Filter,可以手动关闭对应的 Filter,比如:

<!-- 关闭 Sentinel 对应的 Service Consumer Filter --><dubbo:consumerfilter="-sentinel.dubbo.consumer.filter"/>

限流粒度可以是服务接口和服务方法两种粒度:

  • 服务接口:resourceName 为接口全限定名,如com.alibaba.csp.sentinel.demo.dubbo.FooService
  • 服务方法:resourceName 为接口全限定名:方法签名,如com.alibaba.csp.sentinel.demo.dubbo.FooService:sayHello(java.lang.String)

Sentinel Dubbo Adapter 还支持配置全局的 fallback 函数,可以在 Dubbo 服务被限流/降级/负载保护的时候进行相应的 fallback 处理。用户只需要实现自定义的DubboFallback接口,并通过DubboFallbackRegistry注册即可。默认情况会直接将BlockException包装后抛出。同时,我们还可以配合 Dubbo 的 fallback 机制 来为降级的服务提供替代的实现。

我们提供了 Dubbo 的相关示例,请见 sentinel-demo-dubbo。

有关 Sentinel 在 Dubbo 中的最佳实践,请参考 Sentinel: Dubbo 服务的流量哨兵。

关于 Dubbo Filter 的更多信息,请参考 Dubbo Filter 文档。

gRPC

Sentinel 提供与 gRPC Java 的整合,以 gRPC ServerInterceptor 和 ClientInterceptor 的形式保护 gRPC 服务资源。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-grpc-adapter</artifactId><version>x.y.z</version></dependency>

在使用 Sentinel gRPC Adapter 时,只需要将对应的Interceptor注册至对应的客户端或服务端中。其中客户端的示例如下:

publicclassServiceClient{privatefinalManagedChannelchannel;ServiceClient(Stringhost,intport){this.channel=ManagedChannelBuilder.forAddress(host,port).intercept(newSentinelGrpcClientInterceptor())// 在此处注册拦截器.build();// 在此处初始化客户端 stub 类}}

服务端的示例如下:

importio.grpc.Server;Serverserver=ServerBuilder.forPort(port).addService(newMyServiceImpl())// 添加自己的服务实现.intercept(newSentinelGrpcServerInterceptor())// 在此处注册拦截器.build();

注意:Sentinel gRPC Adapter 目前只支持 unary call。

Feign

Feign 适配整合在 Spring Cloud Alibaba 中,可以参考 Spring Cloud Alibaba Sentinel 文档 进行接入。

SOFARPC

从 1.7.2 版本开始,Sentinel 提供 SOFARPC 的适配模块 sentinel-sofa-rpc-adapter,主要包括针对 Service Provider 和 Service Consumer 实现的 Filter。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-sofa-rpc-adapter</artifactId><version>x.y.z</version></dependency>

引入此依赖后,Sentinel 会自动统计 SOFARPC 的服务接口和方法调用(包括调用端和服务端),在配置了规则后就可以自动享受到 Sentinel 的防护能力。

HTTP Client 适配

Apache HttpClient

注:从 Sentinel 1.8.0 版本开始支持。

Sentinel 提供 Apache HttpClient 的适配模块 sentinel-apache-httpclient-adapter,可以针对 HTTP client 请求进行流控和熔断。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-httpclient-adapter</artifactId><version>x.y.z</version></dependency>

注意目前暂不支持 AsyncHttpClient。

OkHttp

注:从 Sentinel 1.8.0 版本开始支持。

Sentinel 提供 OkHttp 的适配模块 sentinel-okhttp-adapter,可以针对 HTTP client 请求进行流控和熔断。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-okhttp-adapter</artifactId><version>x.y.z</version></dependency>

Reactive 适配

Reactor

注:从 1.5.0 版本开始支持,需要 Java 8 及以上版本。

Sentinel 提供 Reactor 的适配,可以方便地在 reactive 应用中接入 Sentinel。使用时需引入以下模块(以 Maven 为例):

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-reactor-adapter</artifactId><version>x.y.z</version></dependency>

Sentinel Reactor Adapter 分别针对MonoFlux实现了对应的 Sentinel Operator,从而在各种事件触发时汇入 Sentinel 的相关逻辑。同时 Sentinel 在上层提供了SentinelReactorTransformer用于在组装期装入对应的 operator,用户使用时只需要通过transform操作符来进行变换即可。接入示例:

someService.doSomething()// return type: Mono<T> or Flux<T>.transform(newSentinelReactorTransformer<>(resourceName))// 在此处进行变换.subscribe();

API Gateway 适配

Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。

Spring Cloud Gateway

从 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><version>x.y.z</version></dependency>

使用时只需注入对应的SentinelGatewayFilter实例以及SentinelGatewayBlockExceptionHandler实例即可。比如:

@ConfigurationpublicclassGatewayConfiguration{privatefinalList<ViewResolver>viewResolvers;privatefinalServerCodecConfigurerserverCodecConfigurer;publicGatewayConfiguration(ObjectProvider<List<ViewResolver>>viewResolversProvider,ServerCodecConfigurerserverCodecConfigurer){this.viewResolvers=viewResolversProvider.getIfAvailable(Collections::emptyList);this.serverCodecConfigurer=serverCodecConfigurer;}@Bean@Order(Ordered.HIGHEST_PRECEDENCE)publicSentinelGatewayBlockExceptionHandlersentinelGatewayBlockExceptionHandler(){// Register the block exception handler for Spring Cloud Gateway.returnnewSentinelGatewayBlockExceptionHandler(viewResolvers,serverCodecConfigurer);}@Bean@Order(-1)publicGlobalFiltersentinelGatewayFilter(){returnnewSentinelGatewayFilter();}}

Demo 示例:sentinel-demo-spring-cloud-gateway

详细文档可以参考 网关限流 - Spring Cloud Gateway 文档。

Zuul 1.x

Sentinel 提供了 Zuul 1.x 的适配模块,可以为 Zuul Gateway 提供两种资源维度的限流:

  • route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 route ID(对应RequestContext中的proxy字段)
  • 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

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

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-zuul-adapter</artifactId><version>x.y.z</version></dependency>

详细文档可以参考 网关限流 - Zuul 1.x。

如果您正在使用 Spring Cloud Zuul Starter,那么可以通过引入spring-cloud-alibaba-sentinel-zuul来更方便地整合 Sentinel。请参考 对应文档。

Zuul 2.x

注:从 1.7.2 版本开始支持,需要 Java 8 及以上版本。

Sentinel 提供了 Zuul 2.x 的适配模块,可以为 Zuul Gateway 提供两种资源维度的限流:

  • route 维度:对应 SessionContext 中的routeVIP
  • 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组

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

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-zuul2-adapter</artifactId><version>x.y.z</version></dependency>

详细文档可以参考 网关限流 - Zuul 2.x。

Apache RocketMQ

在 Apache RocketMQ 中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺。如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性。但其实可能后面几秒之内都没有消息投递,若直接把多余的消息丢掉则没有充分利用系统处理消息的能力。我们希望可以把消息突刺均摊到一段时间内,让系统负载保持在消息处理水位之下的同时尽可能地处理更多消息,从而起到“削峰填谷”的效果:

上图中红色的部分代表超出消息处理能力的部分。我们可以看到消息突刺往往都是瞬时的、不规律的,其后一段时间系统往往都会有空闲资源。我们希望把红色的那部分消息平摊到后面空闲时去处理,这样既可以保证系统负载处在一个稳定的水位,又可以尽可能地处理更多消息。Sentinel 专门为这种场景提供了匀速器的特性,可以把突然到来的大量请求以匀速的形式均摊,以固定的间隔时间让请求通过,以稳定的速度逐步处理这些请求,起到“削峰填谷”的效果,从而避免流量突刺造成系统负载过高。同时堆积的请求将会排队,逐步进行处理;当请求排队预计超过最大超时时长的时候则直接拒绝,而不是拒绝全部请求。

比如在 RocketMQ 的场景下配置了匀速模式下请求 QPS 为 5,则会每 200 ms 处理一条消息,多余的处理任务将排队;同时设置了超时时间为 5 s,预计排队时长超过 5 s 的处理任务将会直接被拒绝。示意图如下图所示:

RocketMQ 用户可以根据不同的 group 和不同的 topic 分别设置限流规则,限流控制模式设置为匀速器模式(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER),比如:

privatevoidinitFlowControlRule(){FlowRulerule=newFlowRule();rule.setResource(KEY);// 对应的 key 为 `groupName:topicName`rule.setCount(5);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");// 匀速器模式下,设置了 QPS 为 5,则请求每 200 ms 允许通过 1 个rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);// 如果更多的请求到达,这些请求会被置于虚拟的等待队列中。等待队列有一个 max timeout,如果请求预计的等待时间超过这个时间会直接被 block// 在这里,timeout 为 5srule.setMaxQueueingTimeMs(5*1000);FlowRuleManager.loadRules(Collections.singletonList(rule));}

结合 RocketMQ Client 使用 Sentinel 时,用户需要在处理消息时手动埋点。详情请见 Sentinel RocketMQ Demo。相关 Blog 见 Sentinel 为 RocketMQ 保驾护航。


source

open-source-framework-integrations | Sentinel

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 23:51:08

Flamingo多模态大模型实战教程:原理解析 + 图文理解应用,打造智能交互新体验

文章目录 多模态大模型Flamingo实战指南:开启图文交互的智能新纪元 一、技术引力:Flamingo为何是多模态的“破局者”? 二、技术解构:Flamingo的“智能内核” 1. 三大核心模块 2. 技术优势 三、环境搭建:一键配置多模态开发环境 1. 基础依赖安装 2. 下载Flamingo源码与模型…

作者头像 李华
网站建设 2026/5/4 1:49:45

企业网站制作公司对比:2026年十大靠谱网站建设公司盘点

在数字经济深度渗透的2026年&#xff0c;企业官网已从单纯的“线上名片”进化为承载品牌价值传递、用户精准转化与全链路数据沉淀的核心数字化阵地。面对AI智能交互、3D沉浸式体验、移动端优先等技术趋势&#xff0c;选择适配的网站建设服务商成为企业数字化转型的关键决策。本…

作者头像 李华
网站建设 2026/5/4 1:50:32

基于spring+vue的在线教育微信小程序[spring]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着移动互联网的快速发展&#xff0c;在线教育作为一种新兴的教育模式受到广泛关注。微信小程序的普及为在线教育提供了新的平台和机遇。本文介绍了一个基于SpringVue框架的在线教育微信小程序的设计与实现。该系统利用Spring框架构建后端服务&#xff0c;提供…

作者头像 李华
网站建设 2026/5/1 9:38:11

导致BSCI认证不通过的问题有哪些?

BSCI验厂是由倡议商界遵守社会责任组织发起的一项全球供应链社会责任审核项目&#xff0c;旨在确保供应商遵守社会责任标准&#xff0c;包括遵守法律、尊重人权、保护劳工权益、确保工作环境安全健康等方面。BSCI验厂不通过&#xff0c;通常是因为劳工权益、安全卫生或管理体系…

作者头像 李华
网站建设 2026/5/1 7:28:44

2026必备!继续教育必看!9款AI论文工具深度测评

2026必备&#xff01;继续教育必看&#xff01;9款AI论文工具深度测评 2026年度学术写作工具测评&#xff1a;如何选到最适合你的AI助手 随着人工智能技术的不断进步&#xff0c;AI论文工具已经成为高校师生和研究人员不可或缺的得力助手。然而&#xff0c;面对市场上琳琅满目…

作者头像 李华