Как реализовать Spring ehCache с несколькими кластерами - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь настроить параметры репликации ehcache.У меня есть приложение с ehcache, работающее в кластерной среде с использованием двух серверов, и я пытаюсь установить репликацию между двумя экземплярами.

Ниже приведен мой конфиг

@ Bean(destroyMethod = "shutdown") public net.sf.ehcache.CacheManager ehCacheManager () {CacheEventListenerFactoryConfiguration eventListenerFactoryConfig = new CacheEventListenerFactoryConfiguration ();eventListenerFactoryConfig.setClass ( "net.sf.ehcache.distribution.RMICacheReplicatorFactory");eventListenerFactoryConfig.setProperties ("replicateAsynchronously = true, replicatePuts = true, replicateUpdates = true, replicateUpdatesViaCopy = false, replicateRemovals = true");eventListenerFactoryConfig.setPropertySeparator (",");

    BootstrapCacheLoaderFactoryConfiguration bootstrapCacheLoaderFactoryConfig =
            new BootstrapCacheLoaderFactoryConfiguration();
    bootstrapCacheLoaderFactoryConfig.className("net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory");
    bootstrapCacheLoaderFactoryConfig.setProperties("bootstrapAsynchronously=true");
    bootstrapCacheLoaderFactoryConfig.propertySeparator(",");


    CacheConfiguration userEntityCacheConfiguration = new CacheConfiguration();
    userEntityCacheConfiguration.setName("userEntityCache");
    userEntityCacheConfiguration.setMaxEntriesLocalHeap(5);
    userEntityCacheConfiguration.setTimeToLiveSeconds(3600);

    userEntityCacheConfiguration.copyOnRead(true);
    userEntityCacheConfiguration.copyOnWrite(true);
    userEntityCacheConfiguration.addCacheEventListenerFactory(eventListenerFactoryConfig);
    userEntityCacheConfiguration.addBootstrapCacheLoaderFactory(bootstrapCacheLoaderFactoryConfig);

    net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
    config.addCache(userEntityCacheConfiguration);

    FactoryConfiguration<CacheLoaderFactoryConfiguration> peerListenerFactoryConfig = new FactoryConfiguration<>();
    peerListenerFactoryConfig
            .setProperties("hostName=172.19.16.114,port=40001”);
    peerListenerFactoryConfig.setPropertySeparator(",");
    peerListenerFactoryConfig.className("net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory");
    config.addCacheManagerPeerListenerFactory(peerListenerFactoryConfig);


    FactoryConfiguration<CacheLoaderFactoryConfiguration> peerProviderFactoryConfig = new FactoryConfiguration<>();
    peerProviderFactoryConfig
    .setProperties("peerDiscovery=manual,rmiUrls=“//172.19.16.242:40001/userEntityCache");

    peerProviderFactoryConfig.setPropertySeparator(",");
    peerProviderFactoryConfig.className("net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory");
    config.addCacheManagerPeerProviderFactory(peerProviderFactoryConfig);

    config.setMonitoring("autodetect");
    config.setDynamicConfig(true);
    this.newCacheManager = new net.sf.ehcache.CacheManager(config);
    return newCacheManager;

}

Это для первого экземпляра.

Для второго экземпляра я изменил имя хоста peerListenerFactoryConfig на 172.19.16.242 и rmiUrls на //172.19.16.114:40001/userEntityCache

Функции кэширования работают нормальноно репликация не работает

Я получаю следующее исключение

[Тема репликации] 2018-10-26 16:48:12 WARN RMIAsynchronousCacheReplicator - Невозможно отправить сообщение удаленному узлу.Сообщение было: Соединение отказано в хосте: 127.0.0.1;Вложенное исключение: java.net.ConnectException: Соединение отклонено (Соединение отклонено) java.rmi.ConnectException: Соединение отказано в хосте: 127.0.0.1;

Не уверен, почему он пытается попасть на локальный хост.

...