Hystrix-javanica @fallbackMethod最后缓存的响应

时间:2015-09-04 12:52:57

标签: spring-boot hystrix

我希望做以下事情:

@HystrixCommand(fallbackMethod = "returnLastGoodCachedCopy")
void performRequest(String someArg) { 
    // Make HTTP request using RestTemplate configured with EHCache  
}

void returnLastGoodCachedCopy(String someArg) {
    // Return the last successful response 
}

为了更多的背景,我使用的是Spring Boot,并设置RestTemplate就像使用EHCache一样:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate(clientHttpRequestFactory());
}

@Bean
public CloseableHttpClient httpClient() {
    CacheConfig cacheConfig = CacheConfig.custom()
            .setMaxCacheEntries(this.httpClientProperties.getMaxCacheEntries())
            .setMaxObjectSize(this.httpClientProperties.getMaxObjectSize())
            .setHeuristicCachingEnabled(this.httpClientProperties.getHeuristicLifetimeEnabled())
            .setHeuristicDefaultLifetime(this.httpClientProperties.getHeuristicLifetimeSeconds()).build();

    RequestConfig requestConfig = RequestConfig.custom()
            .setConnectTimeout(this.httpClientProperties.getConnectTimeout())
            .setSocketTimeout(this.httpClientProperties.getSocketTimeout()).build();

    Ehcache httpEhcache = (Ehcache) this.ehCacheManager.getCache(httpClientProperties.getCacheName())
            .getNativeCache();

    EhcacheHttpCacheStorage ehcacheHttpCacheStorage = new EhcacheHttpCacheStorage(httpEhcache);

    CloseableHttpClient cachingClient = CachingHttpClients.custom().setCacheConfig(cacheConfig)
            .setHttpCacheStorage(ehcacheHttpCacheStorage).setDefaultRequestConfig(requestConfig).build();

    return cachingClient;
}

private ClientHttpRequestFactory clientHttpRequestFactory() {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient());
    return factory;
}

所以我的想法是使用相同的请求EHCache,但我不确定这是一个合适的解决方案,考虑到缓存是基于缓存控制头,我想分开,所以我可以返回一个无论是否过期,都会收到有效回复。

我的另一个想法是配置一个单独的EHCache缓存,并自己存储响应,然后我可以更容易地访问它们,因为我设置了密钥的格式和值。

在我走这条路之前,我想看看Hystrix中是否已经有任何内置处理这种情况,或者是否有任何其他建议的方法。

0 个答案:

没有答案