2015-04-01 2 views
0

Есть ли какой-то вариант в Hazelcast, чтобы сделать значения кэша карты на узел и не реплицировать его состояние? Я думал, что это была разница между getMap() и getDistributedMap(), но кажется, что они реплицируются между узлами.Hazelcast: Могу ли я настроить карту на JVM?

У меня есть приложение в Weblogic кластере, моя конфигурация:

<?xml version="1.0" encoding="UTF-8"?> 
<hazelcast> 
    <properties> 
     <property name="hazelcast.logging.type">slf4j</property> 
    </properties> 
    <network> 
     <port auto-increment="true">5107</port> 
     <join> 
      <multicast enabled="false" /> 
      <tcp-ip enabled="true"> 
       <members>127.0.0.1:5701, 127.0.0.2:5702</members> 
      </tcp-ip> 
     </join> 
    </network> 
    <map name="default"> 
     <time-to-live-seconds>1800</time-to-live-seconds> 
     <backup-count>0</backup-count> 
     <eviction-policy>LRU</eviction-policy> 
    </map> 
</hazelcast> 

В журналах я могу видеть, что оба узла до

Members [2] { 
     Member [127.0.0.1]:5107 
     Member [127.0.0.1]:5108 this 
} 

Когда я называю мой метод в первом узел Я вижу, что кеш добавлен

.Default (self-tuning)'] [] DEBUG b.c.l.c.c.i.e.c.h.AbstractHazelcastCacheInterceptor - Hazelcast instance HazelcastInstance{name='my-instance', node=Address[127.0.0.1]:5107} 
2015-03-31 21:09:40.040 [[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG b.c.l.c.c.i.e.c.h.AbstractHazelcastCacheInterceptor - Cache map IMap{name='MY_APP.Cache.cacheName'} 
2015-03-31 21:09:40.040 [[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG b.c.l.c.c.i.e.c.h.AbstractHazelcastCacheInterceptor - adding object in the cache with key 2342425 

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

.Default (self-tuning)'] [] DEBUG b.c.l.c.c.i.e.c.h.AbstractHazelcastCacheInterceptor - Hazelcast instance HazelcastInstance{name='my-instance', node=Address[127.0.0.1]:5108} 
2015-03-31 21:09:40.040 [[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG b.c.l.c.c.i.e.c.h.AbstractHazelcastCacheInterceptor - Cache map IMap{name='MY_APP.Cache.cacheName'} 

Не хватает конфигурации? Можно ли добиться успеха с Hazelcast?

+0

Почему вы хотите использовать Hazelcast для этого вместо обычной карты Java (или кэш Guava или что-то подобное)? –

+0

Требование состоит в том, чтобы иметь возможность выполнять распределенный выдворк, но не передавать данные кеша. –

+0

, чтобы вы могли размещать вещи только локально, но когда вы выселяете, он должен выходить на всех узлах? это не похоже на очень прозрачное решение. Не думайте, что hazelcast поддерживает это, предполагая, что вы можете легко реализовать его, используя «ITopic» из hazelcast, публикуя выселение и имея слушателя на каждом узле. –

ответ

2

Как я уже говорил в комментарии потребительную случай, когда:

  • put(key, value) добавляет кортеж только локально
  • evict(key) выселяет его из всех карт

не так уж прозрачно и Я сомневаюсь, что Hazelcast (или любая популярная в памяти сетка) поддерживает его из коробки, но то, что вы можете сделать, это реализовать очень простой pub-sub с Hazelcast. На каждом узле hazelcast вы начинаете тему слушателю:

ITopic<String> eviction = hazelcast.getTopic("evict"); 
eviction.addMessageListener(new EvictionListener()); 

Где EvictionListener будет что-то вроде:

public class EvictionListener implements MessageListener<String> { 

    @Override 
    public void onMessage(Message<String> message) { 
     // Gets the local (per JVM) cache and evicts an entry from it 
     Cache.getCache().evict(message.getMessageObject()); 
    } 
} 

И тогда вы можете реализовать метод выселении как:

public void evict(String key) { 
    hazelcast.getTopic("evict").publish(key); 
} 

Что-то вроде это. Затем вам нужно создать кэш (как я упомянул простую карту Java или кэш Guava) для JVM и использовать метод выселения для выселения.

+0

Спасибо! Я помнил, что интеграция спящего режима создает локальный кеш. Вероятно, на основе этого будет реализована реализация, сочетающаяся с вашими советами. –

Смежные вопросы