From 4e2cd3b7d78779813362cefe63f75a486aac13cb Mon Sep 17 00:00:00 2001 From: icanci Date: Fri, 27 Jan 2023 10:08:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loopstack/ras/client/aop/RpcCallAop.java | 3 +- .../ras/client/cache/MetaCacheHolder.java | 47 +++++++++++++++++++ .../{ => cache}/holder/ApplicationHolder.java | 2 +- .../holder/RasRepositoryHolder.java | 37 +++++---------- .../loadbalancing/FirstLoadBalancing.java | 6 +-- .../loadbalancing/LoadBalancing.java | 6 +-- .../loadbalancing/LoadBalancingBean.java | 2 +- .../loadbalancing/LoadBalancingCache.java | 10 ++-- .../model/ApplicationKey.java | 2 +- .../model/ApplicationValue.java | 2 +- .../model/ClientApplicationValue.java | 2 +- .../ras/client/facade/RpcCallFacade.java | 2 +- .../server/NamedNettyServerHandler.java | 2 +- 13 files changed, 80 insertions(+), 43 deletions(-) create mode 100644 client/src/main/java/cn/icanci/loopstack/ras/client/cache/MetaCacheHolder.java rename client/src/main/java/cn/icanci/loopstack/ras/client/{ => cache}/holder/ApplicationHolder.java (83%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{ => cache}/holder/RasRepositoryHolder.java (88%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/loadbalancing/FirstLoadBalancing.java (78%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/loadbalancing/LoadBalancing.java (66%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/loadbalancing/LoadBalancingBean.java (87%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/loadbalancing/LoadBalancingCache.java (33%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/model/ApplicationKey.java (95%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/model/ApplicationValue.java (97%) rename client/src/main/java/cn/icanci/loopstack/ras/client/{holder => cache}/model/ClientApplicationValue.java (96%) diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/aop/RpcCallAop.java b/client/src/main/java/cn/icanci/loopstack/ras/client/aop/RpcCallAop.java index 6e39d12..8d056b9 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/aop/RpcCallAop.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/aop/RpcCallAop.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Component; /** * AOP拦截 + * TODO 拦截执行时间和相关请求参数,记录到缓存 * * @author icanci * @since 1.0 Created in 2023/01/16 19:56 @@ -27,7 +28,7 @@ public class RpcCallAop { long startTime = System.currentTimeMillis(); Object returnVal = pjp.proceed(); long endTime = System.currentTimeMillis(); - // 只记录执行时间即可 + // TODO 只记录执行时间即可,但是要记录执行的内容 return returnVal; } } diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/cache/MetaCacheHolder.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/MetaCacheHolder.java new file mode 100644 index 0000000..a873d9d --- /dev/null +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/MetaCacheHolder.java @@ -0,0 +1,47 @@ +package cn.icanci.loopstack.ras.client.cache; + +import cn.icanci.loopstack.ras.client.cache.model.ApplicationKey; +import cn.icanci.loopstack.ras.client.cache.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ClientApplicationValue; +import cn.icanci.loopstack.ras.client.properties.RasProperties; + +import java.util.Map; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Maps; + +/** + * 元数据缓存持有者 + * 使用静态Map修饰-为一级缓存 + * - TODO 刷新缓存需要重新加锁。因为是共享数据 + * + * @author icanci + * @since 1.0 Created in 2023/01/23 10:39 + */ +public abstract class MetaCacheHolder { + + /** + * log + */ + private static final Logger logger = LoggerFactory.getLogger(MetaCacheHolder.class); + + @Resource + protected RasProperties rasProperties; + + /** + * 服务端缓存 多个bean共享数据 + * + * 只在一个bean写,在另一个bean读 + */ + protected static final Map SERVER_APPLICATION_MAP = Maps.newConcurrentMap(); + /** + * 客户端缓存 读个bean共享数据 + * + * 只在一个bean写,在另一个bean读 + */ + protected static final Map CLIENT_APPLICATION_MAP = Maps.newConcurrentMap(); +} diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/ApplicationHolder.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/ApplicationHolder.java similarity index 83% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/ApplicationHolder.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/ApplicationHolder.java index 4f7d5da..c620051 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/ApplicationHolder.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/ApplicationHolder.java @@ -1,4 +1,4 @@ -package cn.icanci.loopstack.ras.client.holder; +package cn.icanci.loopstack.ras.client.cache.holder; import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/RasRepositoryHolder.java similarity index 88% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/RasRepositoryHolder.java index b95ad72..1039fc9 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/RasRepositoryHolder.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/holder/RasRepositoryHolder.java @@ -1,16 +1,16 @@ -package cn.icanci.loopstack.ras.client.holder; +package cn.icanci.loopstack.ras.client.cache.holder; import cn.hutool.http.Method; import cn.hutool.json.JSONUtil; import cn.icanci.loopstack.api.client.Client; import cn.icanci.loopstack.api.client.http.HttpClientImpl; import cn.icanci.loopstack.lsi.common.result.R; +import cn.icanci.loopstack.ras.client.cache.MetaCacheHolder; +import cn.icanci.loopstack.ras.client.cache.model.ApplicationKey; +import cn.icanci.loopstack.ras.client.cache.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ClientApplicationValue; import cn.icanci.loopstack.ras.client.exception.ServerApplicationWrongfulException; import cn.icanci.loopstack.ras.client.exception.ServiceNotFoundException; -import cn.icanci.loopstack.ras.client.holder.model.ApplicationKey; -import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; -import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; -import cn.icanci.loopstack.ras.client.properties.RasProperties; import cn.icanci.loopstack.ras.client.server.NamedNettyServerHandler; import cn.icanci.loopstack.ras.client.utils.RandomAddressUtils; import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; @@ -23,12 +23,9 @@ import cn.icanci.loopstack.ras.common.socket.UriConstant; import io.netty.util.internal.ThrowableUtil; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -41,39 +38,29 @@ import com.google.common.collect.Sets; /** * 客户端知晓的服务端信息 - * - + * - MetaCacheHolder 的写bean服务 + * * @author icanci * @since 1.0 Created in 2023/01/19 17:06 */ @Service -public class RasRepositoryHolder implements InitializingBean { - - private static final Logger logger = LoggerFactory.getLogger(RasRepositoryHolder.class); +public class RasRepositoryHolder extends MetaCacheHolder implements InitializingBean { - @Resource - private RasProperties rasProperties; + private static final Logger logger = LoggerFactory.getLogger(RasRepositoryHolder.class); - /** - * 服务缓存 - */ - private static final Map SERVER_APPLICATION_MAP = Maps.newConcurrentMap(); - /** - * 服务缓存 - */ - private static final Map CLIENT_APPLICATION_MAP = Maps.newConcurrentMap(); /** * http://{address}:port+UriConstant.ToClient.LOAD */ - private static final String LOAD_REQUEST_FORMAT = "http://%s:%s" + UriConstant.ToServer.LOAD; + private static final String LOAD_REQUEST_FORMAT = "http://%s:%s" + UriConstant.ToServer.LOAD; /** * 请求地址 */ - private static final String REQUEST_FORMAT = "http://%s:%s"; + private static final String REQUEST_FORMAT = "http://%s:%s"; /** * 客户端 */ - private static final Client CLIENT = HttpClientImpl.getInstance(); + private static final Client CLIENT = HttpClientImpl.getInstance(); @Override public void afterPropertiesSet() throws Exception { diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/FirstLoadBalancing.java similarity index 78% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/FirstLoadBalancing.java index 969749c..142482e 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/FirstLoadBalancing.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/FirstLoadBalancing.java @@ -1,7 +1,7 @@ -package cn.icanci.loopstack.ras.client.holder.loadbalancing; +package cn.icanci.loopstack.ras.client.cache.loadbalancing; -import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; -import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ClientApplicationValue; import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; import java.util.Optional; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancing.java similarity index 66% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancing.java index 6698aec..1ceabc0 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancing.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancing.java @@ -1,7 +1,7 @@ -package cn.icanci.loopstack.ras.client.holder.loadbalancing; +package cn.icanci.loopstack.ras.client.cache.loadbalancing; -import cn.icanci.loopstack.ras.client.holder.model.ApplicationValue; -import cn.icanci.loopstack.ras.client.holder.model.ClientApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ApplicationValue; +import cn.icanci.loopstack.ras.client.cache.model.ClientApplicationValue; import java.util.Optional; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingBean.java similarity index 87% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingBean.java index 8b8e8f9..b95e33f 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingBean.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingBean.java @@ -1,4 +1,4 @@ -package cn.icanci.loopstack.ras.client.holder.loadbalancing; +package cn.icanci.loopstack.ras.client.cache.loadbalancing; import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingCache.java similarity index 33% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingCache.java index 3084a42..3262cf2 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/loadbalancing/LoadBalancingCache.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/loadbalancing/LoadBalancingCache.java @@ -1,13 +1,15 @@ -package cn.icanci.loopstack.ras.client.holder.loadbalancing; +package cn.icanci.loopstack.ras.client.cache.loadbalancing; + +import cn.icanci.loopstack.ras.client.cache.MetaCacheHolder; /** * 负载均衡缓存 * - 存储执行的过程和结果 - * - 缓存分为2种,一种是元数据缓存,一种是执行过程缓存 + * - 数据缓存聚集 * * @author icanci * @since 1.0 Created in 2023/01/23 10:24 */ -public abstract class LoadBalancingCache { - +public abstract class LoadBalancingCache extends MetaCacheHolder { + // TODO 设计缓存的维度,方便执行和刷新 } diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationKey.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationKey.java similarity index 95% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationKey.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationKey.java index 60a0fc7..a1f0d58 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationKey.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationKey.java @@ -1,4 +1,4 @@ -package cn.icanci.loopstack.ras.client.holder.model; +package cn.icanci.loopstack.ras.client.cache.model; import java.util.Objects; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationValue.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationValue.java similarity index 97% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationValue.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationValue.java index 281167d..3edd222 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ApplicationValue.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ApplicationValue.java @@ -1,4 +1,4 @@ -package cn.icanci.loopstack.ras.client.holder.model; +package cn.icanci.loopstack.ras.client.cache.model; import java.util.Objects; import java.util.StringJoiner; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ClientApplicationValue.java b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ClientApplicationValue.java similarity index 96% rename from client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ClientApplicationValue.java rename to client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ClientApplicationValue.java index 6d9c21c..4491c04 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/holder/model/ClientApplicationValue.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/cache/model/ClientApplicationValue.java @@ -1,4 +1,4 @@ -package cn.icanci.loopstack.ras.client.holder.model; +package cn.icanci.loopstack.ras.client.cache.model; import cn.icanci.loopstack.ras.common.enums.LoadBalanceTypeEnum; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/facade/RpcCallFacade.java b/client/src/main/java/cn/icanci/loopstack/ras/client/facade/RpcCallFacade.java index 77bc2d6..8a686bc 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/facade/RpcCallFacade.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/facade/RpcCallFacade.java @@ -4,7 +4,7 @@ import cn.hutool.http.Method; import cn.icanci.loopstack.api.client.Client; import cn.icanci.loopstack.api.client.http.HttpClientImpl; import cn.icanci.loopstack.ras.client.exception.RpcCallException; -import cn.icanci.loopstack.ras.client.holder.RasRepositoryHolder; +import cn.icanci.loopstack.ras.client.cache.holder.RasRepositoryHolder; import java.util.Map; import java.util.concurrent.TimeUnit; diff --git a/client/src/main/java/cn/icanci/loopstack/ras/client/server/NamedNettyServerHandler.java b/client/src/main/java/cn/icanci/loopstack/ras/client/server/NamedNettyServerHandler.java index 15d8307..c0dae89 100644 --- a/client/src/main/java/cn/icanci/loopstack/ras/client/server/NamedNettyServerHandler.java +++ b/client/src/main/java/cn/icanci/loopstack/ras/client/server/NamedNettyServerHandler.java @@ -1,7 +1,7 @@ package cn.icanci.loopstack.ras.client.server; import cn.hutool.json.JSONUtil; -import cn.icanci.loopstack.ras.client.holder.RasRepositoryHolder; +import cn.icanci.loopstack.ras.client.cache.holder.RasRepositoryHolder; import cn.icanci.loopstack.ras.common.socket.RasRefreshDTO; import cn.icanci.loopstack.ras.common.socket.SocketMessage; import cn.icanci.loopstack.ras.common.socket.UriConstant; -- Gitee