From d373ad985b62ea0eef532dd81a89ec4d2e231510 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 20 Apr 2020 18:11:32 +0800 Subject: [PATCH 1/2] :bulb: Documenting source code. --- .../java/com/crossoverjie/cim/route/cache/ServerCache.java | 6 +++--- cim-forward-route/src/main/resources/application.properties | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java index 5062e194..55ef533b 100644 --- a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java +++ b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java @@ -41,11 +41,11 @@ public void addCache(String key) { /** * 更新所有缓存/先删除 再新增 * - * @param currentChilds + * @param currentChildren */ - public void updateCache(List currentChilds) { + public void updateCache(List currentChildren) { cache.invalidateAll(); - for (String currentChild : currentChilds) { + for (String currentChild : currentChildren) { // currentChild=ip-127.0.0.1:11212:9082 or 127.0.0.1:11212:9082 String key ; if (currentChild.split("-").length == 2){ diff --git a/cim-forward-route/src/main/resources/application.properties b/cim-forward-route/src/main/resources/application.properties index 941b0f7c..49e16864 100644 --- a/cim-forward-route/src/main/resources/application.properties +++ b/cim-forward-route/src/main/resources/application.properties @@ -22,19 +22,19 @@ app.zk.connect.timeout=15000 app.zk.root=/route #路由策略,轮询 -app.route.way=com.crossoverjie.cim.common.route.algorithm.loop.LoopHandle +#app.route.way=com.crossoverjie.cim.common.route.algorithm.loop.LoopHandle #路由策略,随机 #app.route.way=com.crossoverjie.cim.common.route.algorithm.random.RandomHandle #路由策略,一致性 hash -#app.route.way=com.crossoverjie.cim.common.route.algorithm.consistenthash.ConsistentHashHandle +app.route.way=com.crossoverjie.cim.common.route.algorithm.consistenthash.ConsistentHashHandle #一致性 hash 算法具体实现--自定义有序 map #app.route.way.consitenthash=com.crossoverjie.cim.common.route.algorithm.consistenthash.SortArrayMapConsistentHash #一致性 hash 算法具体实现--TreeMap -#app.route.way.consitenthash=com.crossoverjie.cim.common.route.algorithm.consistenthash.TreeMapConsistentHash +app.route.way.consitenthash=com.crossoverjie.cim.common.route.algorithm.consistenthash.TreeMapConsistentHash # Redis 配置 spring.redis.host=xx From bdb846e5d70e46569372e21436e00d32a024e5b8 Mon Sep 17 00:00:00 2001 From: crossoverJie Date: Mon, 20 Apr 2020 19:44:25 +0800 Subject: [PATCH 2/2] fix https://github.com/crossoverJie/cim/issues/79 --- .../cim/common/data/construct/SortArrayMap.java | 5 +++++ .../crossoverjie/cim/common/enums/StatusEnum.java | 2 +- .../consistenthash/SortArrayMapConsistentHash.java | 2 ++ .../consistenthash/TreeMapConsistentHash.java | 3 +++ .../crossoverjie/cim/route/cache/ServerCache.java | 6 +----- .../crossoverjie/cim/route/config/BeanConfig.java | 5 +++++ .../cim/route/controller/RouteController.java | 2 ++ .../java/com/crossoverjie/cim/route/kit/ZKit.java | 14 +++++++------- 8 files changed, 26 insertions(+), 13 deletions(-) diff --git a/cim-common/src/main/java/com/crossoverjie/cim/common/data/construct/SortArrayMap.java b/cim-common/src/main/java/com/crossoverjie/cim/common/data/construct/SortArrayMap.java index db2149a1..e296d8b5 100644 --- a/cim-common/src/main/java/com/crossoverjie/cim/common/data/construct/SortArrayMap.java +++ b/cim-common/src/main/java/com/crossoverjie/cim/common/data/construct/SortArrayMap.java @@ -103,6 +103,11 @@ public int size() { return size; } + public void clear(){ + buckets = new Node[DEFAULT_SIZE]; + size = 0 ; + } + /** * 数据节点 */ diff --git a/cim-common/src/main/java/com/crossoverjie/cim/common/enums/StatusEnum.java b/cim-common/src/main/java/com/crossoverjie/cim/common/enums/StatusEnum.java index 7a221a38..990e4265 100644 --- a/cim-common/src/main/java/com/crossoverjie/cim/common/enums/StatusEnum.java +++ b/cim-common/src/main/java/com/crossoverjie/cim/common/enums/StatusEnum.java @@ -29,7 +29,7 @@ public enum StatusEnum { SERVER_NOT_AVAILABLE("7100", "cim server is not available, please try again later!"), - RECONNECT_FAIL("7200", "reconnect fail, continue to retry!"), + RECONNECT_FAIL("7200", "Reconnect fail, continue to retry!"), /** 登录信息不匹配 */ ACCOUNT_NOT_MATCH("9100", "The User information you have used is incorrect!"), diff --git a/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/SortArrayMapConsistentHash.java b/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/SortArrayMapConsistentHash.java index 31637aa9..ed7f17ee 100644 --- a/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/SortArrayMapConsistentHash.java +++ b/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/SortArrayMapConsistentHash.java @@ -20,6 +20,8 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash { @Override public void add(long key, String value) { + // fix https://github.com/crossoverJie/cim/issues/79 + sortArrayMap.clear(); for (int i = 0; i < VIRTUAL_NODE_SIZE; i++) { Long hash = super.hash("vir" + key + i); sortArrayMap.add(hash,value); diff --git a/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/TreeMapConsistentHash.java b/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/TreeMapConsistentHash.java index 0db7e7d8..73f9869d 100644 --- a/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/TreeMapConsistentHash.java +++ b/cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/consistenthash/TreeMapConsistentHash.java @@ -23,6 +23,9 @@ public class TreeMapConsistentHash extends AbstractConsistentHash { @Override public void add(long key, String value) { + + // fix https://github.com/crossoverJie/cim/issues/79 + treeMap.clear(); for (int i = 0; i < VIRTUAL_NODE_SIZE; i++) { Long hash = super.hash("vir" + key + i); treeMap.put(hash,value); diff --git a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java index 55ef533b..0c16d06c 100644 --- a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java +++ b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/cache/ServerCache.java @@ -10,7 +10,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; /** * Function: 服务器节点缓存 @@ -30,9 +29,6 @@ public class ServerCache { @Autowired private ZKit zkUtil; - private AtomicLong index = new AtomicLong(); - - public void addCache(String key) { cache.put(key, key); } @@ -46,7 +42,7 @@ public void addCache(String key) { public void updateCache(List currentChildren) { cache.invalidateAll(); for (String currentChild : currentChildren) { - // currentChild=ip-127.0.0.1:11212:9082 or 127.0.0.1:11212:9082 + // currentChildren=ip-127.0.0.1:11212:9082 or 127.0.0.1:11212:9082 String key ; if (currentChild.split("-").length == 2){ key = currentChild.split("-")[1]; diff --git a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/config/BeanConfig.java b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/config/BeanConfig.java index 8b32d6bf..33d7b488 100644 --- a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/config/BeanConfig.java +++ b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/config/BeanConfig.java @@ -7,6 +7,8 @@ import com.google.common.cache.LoadingCache; import okhttp3.OkHttpClient; import org.I0Itec.zkclient.ZkClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,6 +30,8 @@ @Configuration public class BeanConfig { + private static Logger logger = LoggerFactory.getLogger(BeanConfig.class); + @Autowired private AppConfiguration appConfiguration; @@ -83,6 +87,7 @@ public OkHttpClient okHttpClient() { public RouteHandle buildRouteHandle() throws Exception { String routeWay = appConfiguration.getRouteWay(); RouteHandle routeHandle = (RouteHandle) Class.forName(routeWay).newInstance(); + logger.info("Current route algorithm is [{}]", routeHandle.getClass().getSimpleName()); if (routeWay.contains("ConsistentHash")) { //一致性 hash 算法 Method method = Class.forName(routeWay).getMethod("setHash", AbstractConsistentHash.class); diff --git a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/controller/RouteController.java b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/controller/RouteController.java index 6f39a5bd..20562c99 100644 --- a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/controller/RouteController.java +++ b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/controller/RouteController.java @@ -154,6 +154,8 @@ public BaseResponse login(@RequestBody LoginReqVO loginReqVO) th // check server available String server = routeHandle.routeServer(serverCache.getServerList(),String.valueOf(loginReqVO.getUserId())); + LOGGER.info("userName=[{}] route server info=[{}]", loginReqVO.getUserName(), server); + RouteInfo routeInfo = RouteInfoParseUtil.parse(server); commonBizService.checkServerAvailable(routeInfo); diff --git a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/kit/ZKit.java b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/kit/ZKit.java index d138c47b..2b9c76de 100644 --- a/cim-forward-route/src/main/java/com/crossoverjie/cim/route/kit/ZKit.java +++ b/cim-forward-route/src/main/java/com/crossoverjie/cim/route/kit/ZKit.java @@ -12,7 +12,7 @@ import java.util.List; /** - * Function: Zookeeper 工具 + * Function: Zookeeper kit * * @author crossoverJie * Date: 2018/8/19 00:33 @@ -39,11 +39,11 @@ public class ZKit { public void subscribeEvent(String path) { zkClient.subscribeChildChanges(path, new IZkChildListener() { @Override - public void handleChildChange(String parentPath, List currentChilds) throws Exception { - logger.info("Clear or update local cache parentPath=[{}],currentChilds=[{}]", parentPath,currentChilds.toString()); + public void handleChildChange(String parentPath, List currentChildren) throws Exception { + logger.info("Clear and update local cache parentPath=[{}],currentChildren=[{}]", parentPath,currentChildren.toString()); - //更新所有缓存/先删除 再新增 - serverCache.updateCache(currentChilds) ; + //update local cache, delete and save. + serverCache.updateCache(currentChildren) ; } }); @@ -52,12 +52,12 @@ public void handleChildChange(String parentPath, List currentChilds) thr /** - * 获取所有注册节点 + * get all server node from zookeeper * @return */ public List getAllNode(){ List children = zkClient.getChildren("/route"); - logger.info("查询所有节点成功=【{}】", JSON.toJSONString(children)); + logger.info("Query all node =[{}] success.", JSON.toJSONString(children)); return children; }