jetlinks之cache和cluster(三)

jetlinks之cache、cluster

提示:主要目的是为了学习下jetlinks,比较倾向物模型,感谢大佬们的开源,学习路径先通过通读jetlinks-core源码开始




本章主要是jetlinks缓存配置及相应本地化数据


前言

提示:jetlink cache管理


提示:以下是本篇文章正文内容,下面案例可供参考

一、缓存代码结构

在这里插入图片描述
在这里插入图片描述

缓存工具 支持支持 jctools,Caffeine,Guava.。
JCTools (Java Concurrency Tools) 提供了一系列非阻塞并发数据结构(标准 Java 中缺失的),当存在线程争抢的时候,非阻塞并发数据结构比阻塞并发数据结构能提供更好的性能。JCTools 是一个开源工具包,在 Apache License 2.0 下发布,并在 Netty、Rxjava 等诸多框架中被广泛使用。
Caffeine 是基于Java 8的高性能,接近最佳的缓存库。Caffeine使用Google Guava启发的API提供内存缓存。 改进取决于您设计Guava缓存和ConcurrentLinkedHashMap的体验。
在这里插入图片描述

二、代码学习分解

1.缓存配置

Caches 主要根据环境来创建不同的ConcurrentMap实现

代码如下(示例):

 private static boolean caffeinePresent() {
        if (Boolean.getBoolean("jetlinks.cache.caffeine.disabled")) {
            return false;
        }
        try {
            Class.forName("com.github.benmanes.caffeine.cache.Cache");
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
     private static boolean jctoolPresent() {
        if (Boolean.getBoolean("jetlinks.cache.jctool.disabled")) {
            return false;
        }
        try {
            Class.forName("org.jctools.maps.NonBlockingHashMap");
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
        static {
        if (jctoolPresent()) {
            cacheSupplier = NonBlockingHashMap::new;
        } else if (caffeinePresent()) {
            cacheSupplier = Caches::createCaffeine;
        } else if (guavaPresent()) {
            cacheSupplier = Caches::createGuava;
        } else {
            cacheSupplier = ConcurrentHashMap::new;
        }
    }

优先级依次是jctools Caffeine Guava

2.数据本地化

基于文件的本地队列,可使用此队列进行数据本地持久化
在这里插入图片描述
在这里插入图片描述
FileQueue 本地化文件队列,提供builder创建。
Builder 队列创建 队列名称,编码器,文件存储路径,及其他队列构造配置等
FileQueueBuilderFactory 本地化文件队列工厂,jetlinks提供了默认实现,在jetlinks-support包中
Codec 编码器 后续会展开查看

SPIFileQueueBuilder 接口FileQueue.Builder的实现利用jdk spi功能进行自定义拓展:
代码如下(示例):

 static {
        ServiceLoader<FileQueueBuilderFactory> loader = ServiceLoader.load(FileQueueBuilderFactory.class, SPIFileQueueBuilder.class
                .getClassLoader());
        Iterator<FileQueueBuilderFactory> iterator = loader.iterator();
        if (!iterator.hasNext()) {
            SPIFileQueueBuilder.log.warn("Cant not load service [FileQueueBuilderFactory]");
            factory = new FileQueueBuilderFactory() {
                @Override
                @SuppressWarnings("all")
                public <T> FileQueue.Builder<T> create() {
                    throw new UnsupportedOperationException("unsupported service FileQueueBuilderFactory");
                }
            };
        } else {
            factory = iterator.next();
            SPIFileQueueBuilder.log.debug("Load service [FileQueueBuilderFactory] : [{}]", factory.getClass());
        }
    }

对应resources下需配置

     --resources
     ---|---META-INF
     ---|-----|--services
     ---|-----|-----|---org.jetlinks.core.cache.FileQueueBuilderFactory

该处使用的url网络请求的数据。

2.集群定义

ClusterCache 集群缓存,通常用于集群见共享数据.
ClusterCounter 集群计数器支持
ClusterManager 集群管理器
ClusterQueue 集群队列
ClusterSet 集群Set支持
ClusterTopic 集群广播
HaManager 集群高可用管理器,可用于监听集群中的节点上下线信息.
ServerNode 服务节点定义


总结

提示:这里对文章进行总结:
例如:以上就是今天要学习的内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值