2017-09-27 8 views
0

J'essaie de configurer mon client Resteasy pour la mise en cache HTTP des clients. Je voudrais avoir un cache persistant du côté client, qui survit à un redémarrage de mon application cliente. Avec l'aide de google je suis en mesure de configurer mon client Resteasy comme ceci:Resteasy Client Http Mise en cache

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(); 

Je peux voir que le client Resteasy utilise un mécanisme de mise en cache. Lorsque vous invoquez une demande deux fois, la deuxième demande est beaucoup plus rapide que la première. Toutefois, le cache n'est pas conservé lors de la fermeture du client. De plus, il n'y a jamais de fichier écrit dans le répertoire spécifié lors de la configuration du client. Y a-t-il quelque chose qui me manque? J'ai besoin que le cache soit restauré à partir du système de fichiers après un redémarrage.

Répondre

0

Lorsque j'ai exécuté votre code sans la couche resteasy, le fichier httpclient a correctement stocké un fichier dans le répertoire cache pour chaque requête envoyée. Une erreur attendue a été générée lorsque le répertoire de cache n'existe pas. En ce qui concerne la récupération du cache au redémarrage, il semble que le ManagedHttpCacheStorage ne soit pas conçu pour récupérer les entrées mises en cache au redémarrage. Il est donc stocké dans le système de fichiers lorsqu'il est utilisé avec FileResourceFactory, mais ne se charge pas à partir du fichier. système. Par conséquent, seule l'implémentation memcached semble fournir cette fonctionnalité de survie de l'objet mis en cache au redémarrage de l'application, alors que ehcache semble ne pas fournir cette fonctionnalité dans le projet open-source.