【问题标题】:Resteasy Client Http cachingResteasy 客户端 Http 缓存
【发布时间】:2017-10-07 07:22:51
【问题描述】:

我正在尝试为客户端 http 缓存配置我的 Resteasy 客户端。我想在客户端有一个持久缓存,它可以在我的客户端应用程序重新启动后继续存在。在谷歌的帮助下,我能够像这样设置我的 Resteasy 客户端:

File cacheDir = new File("C:\\Users\\MyUser\\Desktop\\cache");
CacheConfig config = CacheConfig.DEFAULT;
FileResourceFactory resourceFactory = new FileResourceFactory(cacheDir);
ManagedHttpCacheStorage cacheStorage = new ManagedHttpCacheStorage(config);
CloseableHttpClient client = CachingHttpClients.custom()
            .setCacheConfig(config)
            .setResourceFactory(resourceFactory)
            .setHttpCacheStorage(cacheStorage)
            .setDeleteCache(false)
            .build();
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(client);
ResteasyClient rclient = new ResteasyClientBuilder().httpEngine(engine).build();

我可以看到 Resteasy 客户端正在使用缓存机制。两次调用请求时,第二个请求比第一个请求快得多。但是,关闭客户端时缓存不会持久化。此外,在设置客户端时,指定目录中永远不会写入文件。有什么我想念的吗?我需要在重启后从文件系统中恢复缓存。

【问题讨论】:

    标签: caching resteasy apache-httpclient-4.x http-caching


    【解决方案1】:

    当我在没有 resteasy 层的情况下运行您的代码时,httpclient 成功地在缓存目录中为每个已调度的请求存储了一个文件。缓存目录不存在时引发预期错误。

    至于重启时缓存的恢复,ManagedHttpCacheStorage似乎不是为了在重启时恢复缓存条目而设计的,所以它确实存储到文件系统,当与FileResourceFactory一起使用时,但不加载从文件系统。

    因此,似乎只有memcached 实现提供了此功能,即在应用程序重新启动时缓存对象存活,而ehcache 似乎在开源项目中不提供此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2012-07-26
      • 2019-04-24
      相关资源
      最近更新 更多