sentinel 对请求来源限流
时间: 2023-11-29 12:06:28 浏览: 112
Sentinel对请求来源的限流是通过设置limitApp属性来实现的。limitApp属性用于指定流控针对的调用来源。如果limitApp属性的值为default,则不区分调用来源,即对所有调用来源都进行流量控制。如果limitApp属性的值为特定的调用来源,比如Entrance1,那么只有从Entrance1的调用才会进行流量控制。这样可以根据不同的调用来源对请求进行限流,保护被限流的资源。\[1\]\[2\]
#### 引用[.reference_title]
- *1* *2* *3* [Sentinel 限流原理](https://blog.csdn.net/qq_35958391/article/details/124509242)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
sentinel自定义限流
Sentinel提供了两种方式来进行自定义限流:
1. 实现自定义限流规则
可以通过实现`com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser`接口来实现自定义限流规则。这个接口提供了一个方法`parseOrigin(HttpServletRequest request)`,通过这个方法可以获取请求的来源,开发者可以根据请求的来源来实现自定义的限流规则。例如,可以根据请求的IP地址、用户ID等信息进行限流。
具体实现步骤如下:
- 实现`RequestOriginParser`接口。
```java
public class CustomRequestOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest request) {
// 根据请求的IP地址限流
return request.getRemoteAddr();
}
}
```
- 在`sentinel.properties`配置文件中指定自定义的限流规则类。
```
csp.sentinel.servlet.callback.requestOriginParser=com.example.CustomRequestOriginParser
```
2. 实现自定义限流策略
Sentinel提供了`com.alibaba.csp.sentinel.slots.block.BlockException`类来表示限流异常,当一个请求被限流时,Sentinel会抛出这个异常。开发者可以通过实现`com.alibaba.csp.sentinel.adapter.servlet.callback.BlockExceptionHandler`接口来自定义限流策略。这个接口提供了一个方法`handle(HttpServletRequest request, HttpServletResponse response, BlockException e)`,通过这个方法可以获取被限流的请求和限流异常信息,开发者可以根据这些信息来实现自定义的限流策略。例如,可以返回一个自定义的错误页面或者JSON格式的错误信息。
具体实现步骤如下:
- 实现`BlockExceptionHandler`接口。
```java
public class CustomBlockExceptionHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
// 返回一个自定义的错误页面
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<h1>请求被限流了,请稍后再试!</h1>");
}
}
```
- 在`sentinel.properties`配置文件中指定自定义的限流策略类。
```
csp.sentinel.servlet.callback.blockExceptionHandler=com.example.CustomBlockExceptionHandler
```
sentinel静态配置
Sentinel静态配置是指在应用程序启动时,通过配置文件或代码的方式,对Sentinel进行规则的配置。这些规则可以包括流控规则、降级规则、系统保护规则等。静态配置的优点是可以在应用程序启动时就完成规则的配置,避免了在运行时动态修改规则可能带来的风险。同时,静态配置也可以提高规则的可维护性和可读性。
对于上述引用中的代码,可以通过静态配置的方式对其进行限流或降级等规则的配置。例如,可以通过在配置文件中添加以下内容来对/sentinel02接口进行流控规则的配置:
```
[
{
"resource": "/sentinel02",
"limitApp": "default",
"grade": 1,
"count": 10,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
```
这个配置表示对/sentinel02接口进行流控,限制每秒钟最多只能处理10个请求。其中,resource表示资源名称,limitApp表示流控针对的调用来源,grade表示流控模式,count表示阈值,strategy表示流控策略,controlBehavior表示流控效果,clusterMode表示是否为集群模式。
类似地,可以通过静态配置的方式对/sentinel03接口进行降级规则的配置。例如,可以在配置文件中添加以下内容:
```
[
{
"resource": "/sentinel03",
"count": 10,
"timeWindow": 10,
"grade": 0,
"statIntervalMs": 10000,
"slowRatioThreshold": 0.5,
"minRequestAmount": 5,
"maxAllowedRtMs": 1000
}
]
```
这个配置表示对/sentinel03接口进行降级,当10秒内请求数量超过10个时,触发降级。其中,resource表示资源名称,count表示阈值,timeWindow表示时间窗口,grade表示降级模式,statIntervalMs表示统计间隔时间,slowRatioThreshold表示慢调用比例阈值,minRequestAmount表示最小请求数量,maxAllowedRtMs表示最大允许响应时间。
阅读全文