HotRod ClientListener не получает обновленное представление для HotRod serevr?

У меня есть 2 сервера HotRod, работающих в режиме REPL_ASYNC. Я пытаюсь подключить его с помощью клиента hotrod, указав адрес и порт сервера hotrod.

Я пытаюсь реализовать функциональность, аналогичную Near Cache. причина не использовать Nearcache, чтобы избежать вызова RPC. Мы хотим, чтобы контроль над удаленным вызовом осуществлял NearCache. Я реализовал всю логику вместе со слушателем уведомлений. Поэтому для этого я пытаюсь подключить ClientListener к RemoteCache, а затем хотел принять меры по уведомлению о событии. он работает, как и ожидалось, когда все серверы работают. но он не получает обновленное представление сервера, когда один из серверов hotrod останавливается или добавляется новый сервер. в то время как при запуске клиента Hotrod без ClientListener я получаю обновленное представление о сервере.

Кто-нибудь есть идеи об этом, пожалуйста, поделитесь, я пробовал много вещей, но безуспешно.

Подскажите пожалуйста, сталкивался ли кто-нибудь с этой проблемой?

Обновление: получение обновленного представления всякий раз, когда мы выполняем операцию get, но если операция get не выполняется, то обновление топологии не происходит.

Используемая конфигурация:

final ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.clustering().stateTransfer().awaitInitialTransfer(true);
configurationBuilder.clustering().stateTransfer().fetchInMemoryState(true);
configurationBuilder.clustering().sync().replTimeout(15000);
configurationBuilder.clustering().cacheMode(CacheMode.REPL_ASYNC);
configurationBuilder.dataContainer().compatibility().enable();configurationBuilder.transaction().transactionMode(TransactionMode.TRANSACTIONAL);configurationBuilder.storeAsBinary().enable().storeKeysAsBinary(false).storeValuesAsBinary(false);
configurationBuilder.jmxStatistics().enabled(true);
configurationBuilder.eviction().strategy(LIRS);
configurationBuilder.eviction().maxEntries(25000);
configurationBuilder.expiration().lifespan(-1);

1 ответ

Я могу решить эту проблему, применяя приведенное ниже решение, может помочь кому-то с подобной проблемой:

В hotrod server у меня был кеш по умолчанию поверх того, что я создал для кеширования. на стороне клиента я подключил слушатель к своему кешу, но внутренне бесконечное время использовало кеш по умолчанию при выполнении операции ping для получения представления топологии. так как я подключил слушателя только к нашему собственному кешу, и он не был кешем по умолчанию, он также не смог получить обновленное представление об операции ping.

Чтобы решить эту проблему, я сделал один из кэшей в качестве кэша по умолчанию, используя приведенный ниже код

new HotRodServerConfigurationBuilder().defaultCacheName("cacheName")

надеюсь, что это поможет кому-то, кто имеет аналогичные проблемы.

Другие вопросы по тегам