天天看點

Sentinel Apache Httpclient 擴充卡介紹

添加以下依賴項

pom.xml

(如果您使用的是 Maven):

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

我們可以在初始化

SentinelApacheHttpClientBuilder

時使用when

CloseableHttpClient

,例如:

CloseableHttpClient httpclient = new SentinelApacheHttpClientBuilder().build();      

如果我們要添加一些額外的配置,可以參考下面的代碼

HttpClientBuilder builder = new SentinelApacheHttpClientBuilder();
//builder Other Definitions
CloseableHttpClient httpclient = builder.build();      

配置

  • SentinelApacheHttpClientConfig

    配置:
名稱 描述 類型 預設值
字首 自定義資源字首

String

httpclient:

提取器 自定義資源提取器

ApacheHttpClientResourceExtractor

DefaultApacheHttpClientResourceExtractor

倒退 當請求被阻塞時處理請求

ApacheHttpClientFallback

DefaultApacheHttpClientFallback

提取器(資源提取器)

我們可以在預設配置中定義

ApacheHttpClientResourceExtractor

自定義資源提取器替換,例如: httpclient:GET:/httpclient/back/1 ==> httpclient:GET:/httpclient/back/{id}

DefaultApacheHttpClientResourceExtractor

SentinelApacheHttpClientBuilder

SentinelApacheHttpClientConfig config = new SentinelApacheHttpClientConfig();
config.setExtractor(new ApacheHttpClientResourceExtractor() {

    @Override
    public String extractor(HttpRequestWrapper request) {
        String contains = "/httpclient/back/";
        String uri = request.getRequestLine().getUri();
        if (uri.startsWith(contains)) {
            uri = uri.substring(0, uri.indexOf(contains) + contains.length()) + "{id}";
        }
        return request.getMethod() + ":" + uri;
    }
});
CloseableHttpClient httpclient = new SentinelApacheHttpClientBuilder(config).build();      

回退(塊處理)

我們可以

ApacheHttpClientFallback

SentinelApacheHttpClientBuilder

預設配置中定義,根據實際場景來處理請求被阻塞,例如:

public class DefaultApacheHttpClientFallback implements ApacheHttpClientFallback {

    @Override
    public CloseableHttpResponse handle(HttpRequestWrapper request, BlockException e) {
        // Just wrap and throw the exception.
        throw new SentinelRpcException(e);
    }
}