Hazelcast IMap TTL Expiry - PullRequest
       96

Hazelcast IMap TTL Expiry

1 голос
/ 17 января 2020

Как вызвать метод для синхронизации c данных с какой-либо БД или Кафкой после истечения срока действия набора TTL во время метода put класса IMap.

eg:IMap.put(key,value,TTL,TimeUnit.SECONDS);

, если для указанного выше TTL установлено значение за 10 секунд я должен вызвать какой-нибудь магазин или какой-нибудь механизм, где я мог бы синхронизировать c этот ключ и значение с БД или Кафкой в ​​режиме реального времени. На данный момент, когда я попробовал метод store, он немедленно вызывает метод вместо 10 секунд ожидания.

1 Ответ

1 голос
/ 21 января 2020

Вы можете установить EntryExpiredListener для вашей конфигурации карты.

Он питается от двух источников истечения, основанного на истечении срока действия, это max-idle-seconds и time-to-live-seconds.

Пример класса слушателя:

@Slf4j
public class MyExpiredEntryListener implements EntryExpiredListener<String, String>, MapListener {

    @Override
    public void entryExpired(EntryEvent<String, String> event) {
        log.info("entry Expired {}", event);
    }
}

Вы можете добавить эту конфигурацию программно или установить mapconfig через xml файл конфигурации.

Пример использования:

public static void main(String[] args) {
   Config config = new Config();

   MapConfig mapConfig = config.getMapConfig("myMap");
   mapConfig.setTimeToLiveSeconds(10);
   mapConfig.setEvictionPolicy(EvictionPolicy.RANDOM);

   HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);

   IMap<String, String> map = hz.getMap("myMap");
   map.addEntryListener(new MyExpiredEntryListener(), true);
   for (int i = 0; i < 100; i++) {
        String uuid = UUID.randomUUID().toString();
        map.put(uuid, uuid);
   }
}

Вы увидите журналы как показано ниже при запуске этой реализации.

entry Expired EntryEvent {entryEventType = EXPIRED, member = Member [192.168.1.1]: 5701 - ca76c6d8-abe0-4efe-a6a6-24330657675b this, name = 'myMap ', ключ = 70ee594 c -ffea-4584-aefe-1148b9fcdf9f, oldValue = 70ee594 c -ffea-4584-aefe-1148b9fcdf9f, значение = ноль, mergingValue = ноль}

также , вы можете использовать других слушателей записи в соответствии с вашими требованиями.

...