package com.hazelcast.examples.jcache.client; import com.hazelcast.cache.ICache; import com.hazelcast.examples.AbstractApp; import javax.cache.Cache; import javax.cache.CacheManager; import java.util.Iterator; import static com.hazelcast.examples.helper.CommonUtils.sleepMillis; /** * This will try to iterate over cache values and remove them */ public class ClientDataConsumer extends AbstractApp { public static void main(String[] args) { //ClusterGroup server = new ClusterGroup(); //server.init(); new ClientDataConsumer().runApp(); //server.shutdown(); } private void runApp() { // force client be used as a provider clientSetup(); // first thin is we need to initialize the cache Managers for each cluster CacheManager cacheManager1 = initCacheManager(uri1); CacheManager cacheManager2 = initCacheManager(uri2); // create a cache with the provided name Cache<String, Integer> cacheAtCluster1 = cacheManager1.getCache("theCache", String.class, Integer.class); Cache<String, Integer> cacheAtCluster2 = cacheManager2.getCache("theCache", String.class, Integer.class); startConsumerTask(cacheAtCluster1); startConsumerTask(cacheAtCluster2); displayCacheSize("cache@c1", (ICache<String, Integer>) cacheAtCluster1); displayCacheSize("cache@c2", (ICache<String, Integer>) cacheAtCluster2); } private void startConsumerTask(final Cache<String, Integer> cacheAtCluster) { Thread thread = new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { Iterator<Cache.Entry<String, Integer>> iterator = cacheAtCluster.iterator(); while (iterator.hasNext()) { Cache.Entry<String, Integer> entry = iterator.next(); // value maybe null which means it is expired if (entry.getValue() != null) { // poor entry just remove iterator.remove(); // do something with entry, save to db etc. } } if (!sleepMillis(1000)) { return; } } } }); thread.start(); } private void displayCacheSize(final String alias, final ICache<String, Integer> icache) { Thread thread = new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { System.out.println("Cache: " + alias + " size:" + icache.size()); if (!sleepMillis(2000)) { return; } } } }); thread.start(); } }