Лагом: кеширование внешних сервисных звонков
Я внедряю службу Lagom, которая вызывает внешнюю службу с помощью клиента Joss из Swift Stack. Как я могу кэшировать эту информацию, чтобы не вызывать внешнюю службу каждый раз, когда вызывается моя служба?
2 ответа
Вы можете использовать любую библиотеку кэширования, например, ehcache/guava. Когда вы вызываете свою внешнюю службу в первый раз, вы помещаете данные в кеш, а в следующий раз вы находите данные в кеше и заполняете ответ оттуда.
Используйте что-то вроде этого для кэширования объектов класса A:
@Singleton
public class ACache {
public final Cache<String, A> cache;
public SplResultsCache() {
this.cache = CacheBuilder.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES).build();
}
public Cache<String, A> get(){
return this.cache;
}
}
Вы должны зарегистрировать сервис в вашем модуле с помощью этого:
bind(ACache.class).asEagerSingleton();
Затем введите его в свой сервис:
private SplResultsCache cache;
public AService(ACache cache) {
this.cache = cache;
}
И, наконец, вы можете использовать его в методах AService, например:
A a = this.cache.get().getIfPresent(cacheKey);
Конечно, вы можете перегружать методы кеша для прямого доступа к ним.