为度量标准使用不同的Hystrix命令名称

时间:2016-11-22 21:41:04

标签: hystrix

我正在开发一个动态创建Hystrix命令的系统。 sum.add = function() { ... }; 只有一个实现接收其配置以及要在HystrixCommand方法中执行的代码(Callable)。

调用相同远程服务的命令具有基于它们执行的组件的不同命令键,因此它们的断路器彼此独立。但是,我希望根据所调用的远程服务,在单个名称下将它们聚合在度量标准流中。这可能吗?

我可以看到有一个command group属性,我将其设置为我的远程服务名称,但似乎Hystrix Dashboard根据command name将条目分组在一起。

1 个答案:

答案 0 :(得分:0)

这样的事情会提供您正在寻找的行为吗?

public class NamedHystrixCommand extends HystrixCommand<Object> {

    private static final HystrixCommandGroupKey GROUP_KEY =
        HystrixCommandGroupKey.Factory.asKey("Host Routing");
    private static final HystrixThreadPoolProperties.Setter THREAD_POOL_PROPERTIES =
        HystrixThreadPoolProperties.Setter()
                .withMaximumSize(100);
    private static final HystrixCommandProperties.Setter COMMAND_PROPERTIES =
        HystrixCommandProperties.Setter()
                .withExecutionTimeoutInMilliseconds(5000)
                .withMetricsHealthSnapshotIntervalInMilliseconds(1000);

    private final Callable<Object> callable;

    public NamedHystrixCommand(
        String metricName,
        Callable<Object> callable) {
        super(HystrixCommand.Setter
            .withGroupKey(GROUP_KEY)
            .andThreadPoolPropertiesDefaults(THREAD_POOL_PROPERTIES)
            .andCommandPropertiesDefaults(COMMAND_PROPERTIES)
            .andCommandKey(HystrixCommandKey.Factory.asKey(metricName)));
        this.callable = callable;
    }

    @Override
    protected Object run() throws Exception {
        return callable.call();
    }
}