2016-01-05 2 views
0

Есть ли способ получить экземпляр HystrixThreadPoolProperties (или какой-либо другой контейнер свойств), специфичный для HystrixThreadPoolKey?Как получить текущую конфигурацию пула потоков через свой HystrixThreadPoolKey?

Так в основном свойства пула потока по умолчанию обложил моей конфигурации при условии, выполнив команду с:

HystrixCommand.Setter.withGroupKey(<some group>) 
    .andThreadPoolKey(hystrixThreadPoolKey) 
    .andThreadPoolPropertiesDefaults(...) 

Я попытался следующий подход:

HystrixPropertiesStrategy hystrixPropertiesStrategy = HystrixPropertiesStrategyDefault.getInstance(); 

HystrixThreadPoolProperties hystrixThreadPoolProperties = 
      hystrixPropertiesStrategy.getThreadPoolProperties(hystrixThreadPoolKey, HystrixThreadPoolProperties.Setter()); 

Это, кажется, восстановить default Hystrix configuration для потока, но не изменения свойств, я сделал конкретным для конкретного пула, которому соответствует ключ.

Это тот случай, даже если я могу проверить, действительно ли пул потоков собирает конфигурацию при выполнении команд, которые запускаются из нее.

ответ

0

Версия Hystrix, которую я использую, составляет 1.5.0-rc.5, и я не смог найти что-либо из библиотеки, чтобы разрешить прямой поиск свойств threadpool, связанных с командой. Итак, вот что я пробовал использовать Java Reflection:

HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().iterator().next(); 

    Field field = command.getClass().getSuperclass().getSuperclass().getSuperclass().getDeclaredField("threadPool"); 
    field.setAccessible(true); 
    HystrixThreadPool threadPool = (HystrixThreadPool) field.get(command); 

    Field field2 = HystrixThreadPool.HystrixThreadPoolDefault.class.getDeclaredField("properties"); 
    field2.setAccessible(true); 
    HystrixThreadPoolProperties threadPoolProperties = (HystrixThreadPoolProperties) field2.get(threadPool);