我的应用程序有一组可配置的(在运行时)要调用的外部端点:
/foo
/bar
用于使用apache HttpClient进行http调用。
我想在这里使用Hystrix包装HttpClient,但是我想为每个端点分隔断路器,这样如果一个端点失败,它就不会影响其他端点。
我可以通过两个班来做到这一点:
FooCommand extends HystrixCommand<...> {
}
BarCommand extends HystrixCommand<...> {
}
但这是一个硬编码的解决方案,阻止我在运行时动态配置它。
如何构建单个hystrix命令类来实现此目的?
理想情况是这样的:
class MyHystrixHttpClient extends HystrixCommand<Data> {
public MyHystrixHttpClient(String endpoint) {
// here somehow tell hystrix to use "endpoint" string getHash() as a grouping key
}
}
那么我可以像这样使用它:
new MyHystrixHttpClient("/foo").execute(); // (1)
new MyHystrixHttpClient("/bar").execute(); // (2)
如果(1)失败,(2)仍将被执行并单独处理
答案 0 :(得分:1)
您可以在构造函数中设置命令键。这样的事情。
public class HttpCommand extends HystrixCommand<HttpResponse> {
private final HttpClient httpClient;
private final HttpRequestBase request;
public HttpCommand(String commandKey, HttpClient httpClient, HttpRequestBase request) {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("HttpGroup"))
.andCommandKey(HystrixCommandKey.Factory.asKey(commandKey)));
this.httpClient = httpClient;
this.request = request;
}
@Override
protected HttpResponse run() throws Exception {
return httpClient.execute(request);
}
}