Лагом: кеширование внешних сервисных звонков

Я внедряю службу 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);

Конечно, вы можете перегружать методы кеша для прямого доступа к ним.

Другие вопросы по тегам