4

我使用 RESTFul 服务作为前端的后端。该服务在其响应上设置 expires/etag/lastmodified 标头。

我正在寻找的是一个客户端(最好是 java)库,它可以从服务中获取数据并将其缓存在像 ehcache 这样的可插入缓存后端中。

我还希望能够在条目失效后立即使用后台工作线程自动启动缓存。此外,执行条件 GET 应该很聪明。

我遇到了 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html

还有其他人知道的图书馆吗?这不是一个相当普遍的问题吗?

4

3 回答 3

10

Apache HttpComponents 库的 4.0+ 版本带有 HTTP 1.1 缓存支持。您可以将其与 Spring RestTemplate restful 客户端一起使用,如下所示:

    CacheConfig cacheConfig = new CacheConfig();  
    cacheConfig.setMaxCacheEntries(1000);
    cacheConfig.setMaxObjectSize(8192);

    HttpClient cachingClient = new CachingHttpClient(new DefaultHttpClient(), cacheConfig);

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(cachingClient);
    RestTemplate rest = new RestTemplate(requestFactory);
于 2012-09-14T12:00:37.113 回答
2

Java 中客户端 HTTP 缓存的情况并不是特别好。这是一个重要的问题,大多数 HTTP 客户端库开发人员都没有攻击过。

我认为这种情况正在缓慢变化,但我无法提供明确的指示。一个好的开始方法是查看 JAX-RS 的各种实现,这些实现带有诸如 Jersey 之类的客户端 API(它没有客户端缓存)。可能是 Restlet 有一个或 Restfulie,请检查。

这是我通过谷歌找到的:

http://xircles.codehaus.org/projects/httpcache4j

您也可以尝试自己滚动,但您必须小心理解缓存标头(包括 Vary:) 以使其正确。

于 2011-10-01T08:01:26.623 回答
1

RestEasy 具有客户端缓存机制,如果您使用此类客户端,则启动和运行起来很简单。

RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
YourService proxy = ProxyFactory.create(YourService.class, url);

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);

您首先创建一个客户端代理实例,然后将其包装在缓存中。而已。

于 2011-11-03T13:02:01.900 回答