Текущая настройка
У меня есть два экземпляра приложения, работающего на двух разных машинах. Оба узла приложения используют общую конфигурацию Hazelcast для распределенного кэша. Кеш отлично работает с обычным IMap<String, SomeSerializableValue>
.
Проблема
Теперь у меня есть случай, когда вычисление для кэшируемого значения является медленным и дорогостоящим. Я хочу убедиться, что значение для данного ключа рассчитывается только на одном узле приложения. Если другой узел извлекает значение для ключа, но вычисление все еще выполняется, этот узел должен дождаться завершения вычисления.
Идеальным решением было бы что-то вроде этого:
IMap<String, CompletableFuture<SomeSerializableValue>>
но этот подход явно не работает, потому что CompletableFuture
не сериализуем.
Вопрос
Есть ли альтернативное решение в Hazelcast, которое может удовлетворить мои требования?
Например, у кофеина есть концепция AsyncLoadingCache . Тем не менее, он не распространяется. Может ли Hazelcast кешировать асинхронно рассчитанные значения?