All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vip.saturn.job.sharding.service.ShardingTreeCacheService Maven / Gradle / Ivy

There is a newer version: 3.5.1
Show newest version
package com.vip.saturn.job.sharding.service;

import com.vip.saturn.job.sharding.TreeCacheThreadFactory;
import com.vip.saturn.job.sharding.entity.ShardingTreeCache;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.TreeCache;
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
import org.apache.curator.utils.CloseableExecutorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author hebelala
 */
public class ShardingTreeCacheService {

    private static final Logger logger = LoggerFactory.getLogger(ShardingTreeCacheService.class);

    private String namespace;
    private CuratorFramework curatorFramework;
    private ShardingTreeCache shardingTreeCache;
    private ExecutorService executorService;

    public ShardingTreeCacheService(String namespace, CuratorFramework curatorFramework) {
        this.namespace = namespace;
        this.curatorFramework = curatorFramework;
        this.shardingTreeCache = new ShardingTreeCache();
    }

    public void addTreeCacheIfAbsent(String path, int depth) {
        try {
            String fullPath = namespace + path;
            if (!shardingTreeCache.containsTreeCache(path, depth)) {
                TreeCache treeCache = TreeCache.newBuilder(curatorFramework, path)
                        .setExecutor(new CloseableExecutorService(executorService, false))
                        .setMaxDepth(depth).build();
                treeCache.start();
                TreeCache treeCacheOld = shardingTreeCache.putTreeCacheIfAbsent(path, depth, treeCache);
                if (treeCacheOld != null) {
                    treeCache.close();
                } else {
                    logger.info("create TreeCache, full path is {}, depth is {}", fullPath, depth);
                }
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

    public void addTreeCacheListenerIfAbsent(String path, int depth, TreeCacheListener treeCacheListener) {
        String fullPath = namespace + path;
        TreeCacheListener treeCacheListenerOld = shardingTreeCache.addTreeCacheListenerIfAbsent(path, depth, treeCacheListener);
        if (treeCacheListenerOld == null) {
            logger.info("add {}, full path is {}, depth is {}", treeCacheListener.getClass().getSimpleName(), fullPath, depth);
        }
    }

    public void removeTreeCache(String path, int depth) {
        shardingTreeCache.removeTreeCache(path, depth);
    }

    public void start() {
        executorService = Executors.newSingleThreadExecutor(new TreeCacheThreadFactory(namespace));
    }

    public void shutdown() {
        shardingTreeCache.shutdown();
        if(executorService != null) {
            executorService.shutdownNow();
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy