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 6e39d12b03e4a895a01fe25b41ce44962e8da34a..8d056b9c5a1643329c12d997bba95ab426253a9c 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 0000000000000000000000000000000000000000..a873d9dd5e8663b66ee4444372b63308b770a1c7 --- /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 4f7d5da0aecb7022fb5b98d3a90a0e6694b7be33..c6200518f200b198b5485b952dbc412fff6fdd78 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 b95ad72c16f3858f7cc8d4fd5245ac319e35f4b9..1039fc941a81b1c780a0873b67fc9d17d8832170 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 969749caf74df50e78ec2582998c283a2c774ead..142482e1e6f11742c678e38f9038c183cdcc9ce8 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 6698aecbf0106d113884d2827113d0a440bcdb06..1ceabc060d24f66480442088feceea2fd2f7ac66 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 8b8e8f9737cb6cf618fc607723f54c25e98a6137..b95e33f0ce9d342e2b936b0ef744098959778c14 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 3084a42968ff5ead8617e3a9190c8873968ca46b..3262cf2ef93d41f61b265f9a939dc56af62368a1 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 60a0fc70c27655a261950c99cb3b08d963729f4f..a1f0d58908940ac480f98db664e48025c64a00eb 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 281167d051ea10c554ad5c5c23682309de9b0c2e..3edd2221ff9247c4bfc0b5a60810bc8d332d591b 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 6d9c21caebbc23b1de3990b8ada35b847fb4fa6c..4491c04155595c31742434f92916aa234192d558 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 77bc2d68c09b53d7427a8540182be85e77de0a93..8a686bc6e1cabae92b267ceaa374521bb1c537f9 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 15d8307d2f0ce6b2e75f443ae155f596f2e83eef..c0dae898f908c839104857acbd3145a584a856b8 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;