Я использую Hazelcast, встроенный в мою JVM. Я хотел бы несколько простых журналов, которые будут регистрировать каждый раз, когда что-то меняется в кэше. Что-то простое, как Cache changed: key = value.

Я мог бы написать эти журналы сам, но я был бы удивлен, если бы это еще не существовало ... Однако я не могу найти вариант.

Существует ли такая регистрация в Hazelcast?

0
Cheetah 19 Дек 2019 в 11:57

1 ответ

Лучший ответ

Нет такой простой конфигурации, как эта change регистрация событий или обработка другой задачи. Hazelcast имеет интерфейсы EntryListener, и вы можете реализовать их в соответствии с необходимыми событиями. Вот документация.

Вы можете попробовать следующий пример фрагмента кода.

Создайте собственный entryListener для того, что вам нужно.

// Your custom entity listener.
@Slf4j
public class MyMapEventLogger implements EntryAddedListener<String, String>,
        EntryRemovedListener<String, String>, EntryUpdatedListener<String, String>,
        EntryEvictedListener<String, String>, MapEvictedListener, MapClearedListener {

    @Override
    public void entryAdded(EntryEvent<String, String> event) {
        log.info("entryAdded: {}" , event);
    }

    @Override
    public void entryRemoved(EntryEvent<String, String> event) {
        log.info("entryRemoved: {}", event);
    }

    @Override
    public void entryUpdated(EntryEvent<String, String> event) {
        log.info("entryUpdated: {}", event);
    }

    @Override
    public void entryEvicted(EntryEvent<String, String> event) {
        log.info("entryEvicted: {}", event);
    }

    @Override
    public void mapEvicted(MapEvent event) {
        log.info("mapEvicted: {}", event);
    }

    @Override
    public void mapCleared(MapEvent event) {
        log.info("mapCleared: {}", event);
    }
}

После создания с помощью метода addEntryListener привяжите свой прослушиватель пользовательской записи к карте.

public class ListenerSample {
    public static void main(String[] args) {
        HazelcastInstance hz = Hazelcast.newHazelcastInstance();

        IMap<String, String> map = hz.getMap("myMap");

        MyMapEventLogger myMapEventLogger= new MyMapEventLogger();
        map.addEntryListener(myMapEventLogger, true);

        // Put, modify and then clear
        map.put("1", "1");
        map.put("1", "2");
        map.clear();
    }
}
1
İlker Korkut 19 Дек 2019 в 12:31