From d00cd159d3cb9d471364beede16314e5c51b7cf3 Mon Sep 17 00:00:00 2001 From: Wxx <2563806166@qq.com> Date: Tue, 9 Jul 2024 02:30:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85watchZk=E4=B8=AD=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=9B=B4=E6=96=B0=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/part2/Client/cache/serviceCache.java | 10 +++++++++ .../serviceCenter/ZkWatcher/watchZK.java | 19 ++++++++++------- .../java/part1/Client/cache/serviceCache.java | 10 +++++++++ .../serviceCenter/ZkWatcher/watchZK.java | 21 ++++++++++++------- .../java/part2/Client/cache/serviceCache.java | 10 +++++++++ .../serviceCenter/ZkWatcher/watchZK.java | 20 +++++++++++------- .../java/part1/Client/cache/serviceCache.java | 10 +++++++++ .../serviceCenter/ZkWatcher/watchZK.java | 20 +++++++++++------- 8 files changed, 91 insertions(+), 29 deletions(-) diff --git a/version2/src/main/java/part2/Client/cache/serviceCache.java b/version2/src/main/java/part2/Client/cache/serviceCache.java index 716d504..4da39df 100644 --- a/version2/src/main/java/part2/Client/cache/serviceCache.java +++ b/version2/src/main/java/part2/Client/cache/serviceCache.java @@ -27,6 +27,16 @@ public class serviceCache { cache.put(serviceName,addressList); } } + //修改服务地址 + public void replaceServiceAddress(String serviceName,String oldAddress,String newAddress){ + if(cache.containsKey(serviceName)){ + List addressList=cache.get(serviceName); + addressList.remove(oldAddress); + addressList.add(newAddress); + }else { + System.out.println("修改失败,服务不存在"); + } + } //从缓存中取服务地址 public List getServcieFromCache(String serviceName){ if(!cache.containsKey(serviceName)) { diff --git a/version2/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java b/version2/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java index 61d6a9c..6d90bfe 100644 --- a/version2/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java +++ b/version2/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java @@ -39,10 +39,7 @@ public class watchZK { // 节点创建时没有赋予值 create /curator/app1 只创建节点,在这种情况下,更新前节点的 data 为 null,获取不到更新前节点的数据 switch (type.name()) { case "NODE_CREATED": // 监听器第一次执行时节点存在也会触发次事件 - //获取更新的节点的路径 - String path=new String(childData1.getPath()); - //按照格式 ,读取 - String[] pathList= path.split("/"); + String[] pathList= pasrePath(childData1); if(pathList.length<=2) break; else { String serviceName=pathList[1]; @@ -57,12 +54,13 @@ public class watchZK { } else { System.out.println("节点第一次赋值!"); } + String[] oldPathList=pasrePath(childData); + String[] newPathList=pasrePath(childData1); + cache.replaceServiceAddress(oldPathList[1],oldPathList[2],newPathList[2]); System.out.println("修改后的数据: " + new String(childData1.getData())); break; case "NODE_DELETED": // 节点删除 - String path_d=new String(childData.getPath()); - //按照格式 ,读取 - String[] pathList_d= path_d.split("/"); + String[] pathList_d= pasrePath(childData); if(pathList_d.length<=2) break; else { String serviceName=pathList_d[1]; @@ -79,4 +77,11 @@ public class watchZK { //开启监听 curatorCache.start(); } + //解析节点对应地址 + public String[] pasrePath(ChildData childData){ + //获取更新的节点的路径 + String path=new String(childData.getPath()); + //按照格式 ,读取 + return path.split("/"); + } } \ No newline at end of file diff --git a/version3/src/main/java/part1/Client/cache/serviceCache.java b/version3/src/main/java/part1/Client/cache/serviceCache.java index 22b49ac..dee03ce 100644 --- a/version3/src/main/java/part1/Client/cache/serviceCache.java +++ b/version3/src/main/java/part1/Client/cache/serviceCache.java @@ -30,6 +30,16 @@ public class serviceCache { cache.put(serviceName,addressList); } } + //修改服务地址 + public void replaceServiceAddress(String serviceName,String oldAddress,String newAddress){ + if(cache.containsKey(serviceName)){ + List addressList=cache.get(serviceName); + addressList.remove(oldAddress); + addressList.add(newAddress); + }else { + System.out.println("修改失败,服务不存在"); + } + } //从缓存中取服务地址列表 public List getServiceListFromCache(String serviceName){ if(!cache.containsKey(serviceName)) { diff --git a/version3/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java b/version3/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java index 7861c1b..c8ef382 100644 --- a/version3/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java +++ b/version3/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java @@ -17,7 +17,7 @@ public class watchZK { //本地缓存 serviceCache cache; - public watchZK(CuratorFramework client,serviceCache cache){ + public watchZK(CuratorFramework client, serviceCache cache){ this.client=client; this.cache=cache; } @@ -39,10 +39,7 @@ public class watchZK { // 节点创建时没有赋予值 create /curator/app1 只创建节点,在这种情况下,更新前节点的 data 为 null,获取不到更新前节点的数据 switch (type.name()) { case "NODE_CREATED": // 监听器第一次执行时节点存在也会触发次事件 - //获取更新的节点的路径 - String path=new String(childData1.getPath()); - //按照格式 ,读取 - String[] pathList= path.split("/"); + String[] pathList= pasrePath(childData1); if(pathList.length<=2) break; else { String serviceName=pathList[1]; @@ -57,12 +54,13 @@ public class watchZK { } else { System.out.println("节点第一次赋值!"); } + String[] oldPathList=pasrePath(childData); + String[] newPathList=pasrePath(childData1); + cache.replaceServiceAddress(oldPathList[1],oldPathList[2],newPathList[2]); System.out.println("修改后的数据: " + new String(childData1.getData())); break; case "NODE_DELETED": // 节点删除 - String path_d=new String(childData.getPath()); - //按照格式 ,读取 - String[] pathList_d= path_d.split("/"); + String[] pathList_d= pasrePath(childData); if(pathList_d.length<=2) break; else { String serviceName=pathList_d[1]; @@ -79,4 +77,11 @@ public class watchZK { //开启监听 curatorCache.start(); } + //解析节点对应地址 + public String[] pasrePath(ChildData childData){ + //获取更新的节点的路径 + String path=new String(childData.getPath()); + //按照格式 ,读取 + return path.split("/"); + } } \ No newline at end of file diff --git a/version3/src/main/java/part2/Client/cache/serviceCache.java b/version3/src/main/java/part2/Client/cache/serviceCache.java index 4d42097..f6c7106 100644 --- a/version3/src/main/java/part2/Client/cache/serviceCache.java +++ b/version3/src/main/java/part2/Client/cache/serviceCache.java @@ -27,6 +27,16 @@ public class serviceCache { cache.put(serviceName,addressList); } } + //修改服务地址 + public void replaceServiceAddress(String serviceName,String oldAddress,String newAddress){ + if(cache.containsKey(serviceName)){ + List addressList=cache.get(serviceName); + addressList.remove(oldAddress); + addressList.add(newAddress); + }else { + System.out.println("修改失败,服务不存在"); + } + } //从缓存中取服务地址列表 public List getServiceListFromCache(String serviceName){ if(!cache.containsKey(serviceName)) { diff --git a/version3/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java b/version3/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java index 61d6a9c..14e9d58 100644 --- a/version3/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java +++ b/version3/src/main/java/part2/Client/serviceCenter/ZkWatcher/watchZK.java @@ -17,6 +17,7 @@ public class watchZK { //本地缓存 serviceCache cache; + public watchZK(CuratorFramework client,serviceCache cache){ this.client=client; this.cache=cache; @@ -39,10 +40,7 @@ public class watchZK { // 节点创建时没有赋予值 create /curator/app1 只创建节点,在这种情况下,更新前节点的 data 为 null,获取不到更新前节点的数据 switch (type.name()) { case "NODE_CREATED": // 监听器第一次执行时节点存在也会触发次事件 - //获取更新的节点的路径 - String path=new String(childData1.getPath()); - //按照格式 ,读取 - String[] pathList= path.split("/"); + String[] pathList= pasrePath(childData1); if(pathList.length<=2) break; else { String serviceName=pathList[1]; @@ -57,12 +55,13 @@ public class watchZK { } else { System.out.println("节点第一次赋值!"); } + String[] oldPathList=pasrePath(childData); + String[] newPathList=pasrePath(childData1); + cache.replaceServiceAddress(oldPathList[1],oldPathList[2],newPathList[2]); System.out.println("修改后的数据: " + new String(childData1.getData())); break; case "NODE_DELETED": // 节点删除 - String path_d=new String(childData.getPath()); - //按照格式 ,读取 - String[] pathList_d= path_d.split("/"); + String[] pathList_d= pasrePath(childData); if(pathList_d.length<=2) break; else { String serviceName=pathList_d[1]; @@ -79,4 +78,11 @@ public class watchZK { //开启监听 curatorCache.start(); } + //解析节点对应地址 + public String[] pasrePath(ChildData childData){ + //获取更新的节点的路径 + String path=new String(childData.getPath()); + //按照格式 ,读取 + return path.split("/"); + } } \ No newline at end of file diff --git a/version4/src/main/java/part1/Client/cache/serviceCache.java b/version4/src/main/java/part1/Client/cache/serviceCache.java index 807d818..6b29acb 100644 --- a/version4/src/main/java/part1/Client/cache/serviceCache.java +++ b/version4/src/main/java/part1/Client/cache/serviceCache.java @@ -27,6 +27,16 @@ public class serviceCache { cache.put(serviceName,addressList); } } + //修改服务地址 + public void replaceServiceAddress(String serviceName,String oldAddress,String newAddress){ + if(cache.containsKey(serviceName)){ + List addressList=cache.get(serviceName); + addressList.remove(oldAddress); + addressList.add(newAddress); + }else { + System.out.println("修改失败,服务不存在"); + } + } //从缓存中取服务地址列表 public List getServiceListFromCache(String serviceName){ if(!cache.containsKey(serviceName)) { diff --git a/version4/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java b/version4/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java index 7861c1b..e23df29 100644 --- a/version4/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java +++ b/version4/src/main/java/part1/Client/serviceCenter/ZkWatcher/watchZK.java @@ -17,6 +17,7 @@ public class watchZK { //本地缓存 serviceCache cache; + public watchZK(CuratorFramework client,serviceCache cache){ this.client=client; this.cache=cache; @@ -39,10 +40,7 @@ public class watchZK { // 节点创建时没有赋予值 create /curator/app1 只创建节点,在这种情况下,更新前节点的 data 为 null,获取不到更新前节点的数据 switch (type.name()) { case "NODE_CREATED": // 监听器第一次执行时节点存在也会触发次事件 - //获取更新的节点的路径 - String path=new String(childData1.getPath()); - //按照格式 ,读取 - String[] pathList= path.split("/"); + String[] pathList= pasrePath(childData1); if(pathList.length<=2) break; else { String serviceName=pathList[1]; @@ -57,12 +55,13 @@ public class watchZK { } else { System.out.println("节点第一次赋值!"); } + String[] oldPathList=pasrePath(childData); + String[] newPathList=pasrePath(childData1); + cache.replaceServiceAddress(oldPathList[1],oldPathList[2],newPathList[2]); System.out.println("修改后的数据: " + new String(childData1.getData())); break; case "NODE_DELETED": // 节点删除 - String path_d=new String(childData.getPath()); - //按照格式 ,读取 - String[] pathList_d= path_d.split("/"); + String[] pathList_d= pasrePath(childData); if(pathList_d.length<=2) break; else { String serviceName=pathList_d[1]; @@ -79,4 +78,11 @@ public class watchZK { //开启监听 curatorCache.start(); } + //解析节点对应地址 + public String[] pasrePath(ChildData childData){ + //获取更新的节点的路径 + String path=new String(childData.getPath()); + //按照格式 ,读取 + return path.split("/"); + } } \ No newline at end of file