AHAS的流量防护支持接入Http Client,首先应用通过SDK方式接入,然后将应用中的Http Client调用再接入AHAS控制台,使Http Client可以使用流量防护服务。目前AHAS提供OkHttp及Apache HttpClient(同步模式)框架的适配。本文介绍如何接入Http Client。

前提条件

接入OkHttp

若要将OkHttp接入AHAS流量防护,您只需在创建OkHttpClient的时候通过以下方式注册AHAS Sentinel的Interceptor:

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new SentinelOkHttpInterceptor(new SentinelOkHttpConfig()))
        .build();
说明 AHAS默认会提取Http Method与URL以okhttp:${httpMethod}:${url}的模式拼接作为资源名,如okhttp:GET:http://localhost:8088/hello

您也可以在创建SentinelOkHttpInterceptor时在SentinelOkHttpConfig中自定义解析资源名的逻辑(OkHttpResourceExtractor),示例如下:

OkHttpResourceExtractor extractor = (request, connection) -> {
    String resource = request.url().toString();
    String regex = "/okhttp/back/";
    if (resource.contains(regex)) {
        resource = resource.substring(0, resource.indexOf(regex) + regex.length()) + "{id}";
    }
    return resource;
};

默认情况下URL访问被限流后会抛出RuntimeException("SentinelBlockException")异常。您也可以在创建SentinelOkHttpConfig时提供自定义的Fallback处理器。Fallback示例如下:

public class SomeFallback implements OkHttpFallback {

    @Override
    public Response handle(Request request, Connection connection, BlockException e) {
        //在此处构造限流后的response。
        return new Response(myErrorBuilder);
    }
}

接入Apache HttpClient

说明 目前仅支持同步模式的CloseableHttpClient。

若要将Apache HttpClient接入AHAS流量防护,您只需通过以下方式使用SentinelApacheHttpClientBuilder构造CloseableHttpClient

HttpClientBuilder builder = new SentinelApacheHttpClientBuilder(config); //使用方式同正常的builder,可以传入自定义的配置。
CloseableHttpClient httpClient = builder.build();

SentinelApacheHttpClientBuilder的使用方式和正常的HttpClientBuilder相同,可以传入自定义的Http Client配置。AHAS默认会提取Http Method与URL以httpclient:${httpMethod}:${url}的模式拼接作为资源名,如 httpclient:GET:http://localhost:8088/hello

您也可以在创建SentinelApacheHttpClientBuilder时在SentinelApacheHttpClientConfig中自定义解析资源名的逻辑 (extractor)。

默认情况下URL访问被限流后会抛出RuntimeException("SentinelBlockException")异常。您也可以在创建SentinelApacheHttpClientConfig时提供自定义的Fallback处理器。Fallback示例如下:

public class MyApacheHttpClientFallback implements ApacheHttpClientFallback {

    @Override
    public CloseableHttpResponse handle(HttpRequestWrapper request, BlockException e) {
        //在此处构造限流后的response。
    }
}

相关文档

关于AHAS应用防护接入的相关文档如下: