Основанное на времени выселение в Hazelcast
Я работаю над требованием, в котором у меня будет N экземпляров Hazelcast, работающих в кластере, а также у всех потребителей Kafka.
Теперь спросим, каждое сообщение, которое приходит на kafka, должно быть добавлено к распределенной карте, и запись должна быть удалена каждые 20 секунд, что я и сделал, используя комбинацию параметров времени жизни и макс. Числа бездействующих секунд на карте. конфигурации.
Но то, что я действительно хочу, это то, что, когда запись выселяется, только один из узлов должен ее обработать, прямо сейчас, извлечение записи сообщается всем узлам.
Дайте мне знать, если потребуется дополнительная информация.
1 ответ
Вы должны добавить localEntryListener к вашей распределенной карте, чтобы участник получал только уведомления, владельцем которых он является.
например
if(map != null){
map.addLocalEntryListener(new EntryAddedListener<Long, Long>() {
@Override
public void entryAdded(EntryEvent<Long, Long> event) {
log.info("LOCAL ENTRY ADDED : {} at {}", event, System.currentTimeMillis());
}
});
Приведенный выше пример предназначен для EntryAddedListener, вы также можете реализовать EntryEvictedListener.