于玉桔 38911c5ec1 Adapter: Support Apache HttpClient (#1455) | 4 年之前 | |
---|---|---|
.. | ||
src | 4 年之前 | |
README.md | 4 年之前 | |
pom.xml | 4 年之前 |
Sentinel provides integration for OkHttp client to enable flow control for web requests.
Add the following dependency in pom.xml
(if you are using Maven):
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-apache-httpclient-adapter</artifactId>
<version>x.y.z</version>
</dependency>
We can use the SentinelApacheHttpClientBuilder
when CloseableHttpClient
at initialization, for example:
CloseableHttpClient httpclient = new SentinelApacheHttpClientBuilder().build();
If we want to add some additional configurations, we can refer to the following code
HttpClientBuilder builder = new SentinelApacheHttpClientBuilder();
//builder Other Definitions
CloseableHttpClient httpclient = builder.build();
SentinelApacheHttpClientConfig
configuration:name | description | type | default value |
---|---|---|---|
prefix | customize resource prefix | String |
httpclient: |
extractor | customize resource extractor | ApacheHttpClientResourceExtractor |
DefaultApacheHttpClientResourceExtractor |
fallback | handle request when it is blocked | ApacheHttpClientFallback |
DefaultApacheHttpClientFallback |
We can define ApacheHttpClientResourceExtractor
to customize resource extractor replace DefaultApacheHttpClientResourceExtractor
at SentinelApacheHttpClientBuilder
default config, for example: httpclient:GET:/httpclient/back/1 ==> httpclient:GET:/httpclient/back/{id}
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();
We can define ApacheHttpClientFallback
at SentinelApacheHttpClientBuilder
default config, to handle request is blocked according to the actual scenario, for example:
public class DefaultApacheHttpClientFallback implements ApacheHttpClientFallback {
@Override
public CloseableHttpResponse handle(HttpRequestWrapper request, BlockException e) {
// Just wrap and throw the exception.
throw new SentinelRpcException(e);
}
}