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 服务节点定义
总结
提示:这里对文章进行总结:
例如:以上就是今天要学习的内容。