Слушатели Hazelcast не работают после переподключения клиента - PullRequest
3 голосов
/ 06 февраля 2020

Мой клиент Hazelcast был отключен из-за возможной вспышки памяти. После повторного подключения клиент не получает сообщений от слушателей на картах и ​​темах. Есть ли способ снова сделать клиент активным для слушателей?

Вот так я инициирую слушателя в моем клиенте / сервисе:

IMap liveMap = hazelcastCacheClientService.getMap("MYMAP");
MyListener myMapListener = new MyListener();
liveMap.addEntryListener(myMapListener,true);

Так выглядит мой слушатель :

public class MyListener implements EntryListener {

    @Override
    public void entryAdded(EntryEvent entryEvent) {
         //do something
    }

    @Override
    public void entryEvicted(EntryEvent entryEvent) {

    }

    @Override
    public void entryRemoved(EntryEvent entryEvent) {

    }

    @Override
    public void entryUpdated(EntryEvent entryEvent) {
        //do something
    }

    @Override
    public void mapCleared(MapEvent mapEvent) {

    }

    @Override
    public void mapEvicted(MapEvent mapEvent) {

    }
}

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

1 Ответ

0 голосов
/ 27 февраля 2020

Если ваша версия 3.9 или старше, это может быть ошибкой. Мы улучшили логику переподключения клиента c в 3.10 и улучшили ее в 3.11. Вот документация 3.11 для конфигурации переподключения клиента: https://docs.hazelcast.org/docs/3.11/manual/html-single/index.html#configuring -client-connection-retry

Теперь, сказав, что я всегда рекомендую дополнительный шаблон автоматического выключателя, такой как один из netflix: https://github.com/Netflix/Hystrix/wiki/How-it-Works

Чтобы восстановить клиентские прослушиватели, лучше уничтожить экземпляр hazelcast и создать новый. Это заставляет все сокеты выполнять инициализацию во время запуска. Hazelcast - это приложение с сокетами, поэтому, если вы страдаете от 1/2 открытых сокетов, Hazelcast мало что может сделать с восстановлением соединений.

Надеюсь, это поможет,

...