diff --git a/rpc-framework-common/src/main/java/github/javaguide/factory/SingletonFactory.java b/rpc-framework-common/src/main/java/github/javaguide/factory/SingletonFactory.java index 6d7cee2c3888500aef0de4a8a9f7756fb58ad9ce..7a02ce88af9419ad1eeace185b803d07538e6ab0 100644 --- a/rpc-framework-common/src/main/java/github/javaguide/factory/SingletonFactory.java +++ b/rpc-framework-common/src/main/java/github/javaguide/factory/SingletonFactory.java @@ -11,21 +11,21 @@ import java.util.Map; * @createTime 2020年06月03日 15:04:00 */ public final class SingletonFactory { - private static volatile Map OBJECT_MAP = new HashMap<>(); + private static volatile Map objectMap = new HashMap<>(); private SingletonFactory() { } public static T getInstance(Class c) { String key = c.toString(); - Object instance = OBJECT_MAP.get(key); + Object instance = objectMap.get(key); if (instance == null) { synchronized (SingletonFactory.class) { - instance = OBJECT_MAP.get(key); + instance = objectMap.get(key); if (instance == null) { try { instance = c.getDeclaredConstructor().newInstance(); - OBJECT_MAP.put(key, instance); + objectMap.put(key, instance); } catch (IllegalAccessException | InstantiationException e) { throw new RuntimeException(e.getMessage(), e); } catch (NoSuchMethodException | InvocationTargetException e) { diff --git a/rpc-framework-simple/src/main/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalance.java b/rpc-framework-simple/src/main/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalance.java index 20df2c8b35a85865add7286e159ce8c8af498fab..ee6d59f5907286fe2abd4b6595f585562b4ca009 100644 --- a/rpc-framework-simple/src/main/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalance.java +++ b/rpc-framework-simple/src/main/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalance.java @@ -12,7 +12,8 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; /** - * refer to dubbo consistent hash load balance: http://dubbo.apache.org/zh-cn/blog/dubbo-consistent-hash-implementation.html + * refer to dubbo consistent hash load balance: https://github.com/apache/dubbo/blob/2d9583adf26a2d8bd6fb646243a9fe80a77e65d5/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/loadbalance/ConsistentHashLoadBalance.java + * * @author RicardoZ * @createTime 2020年10月20日 18:15:20 */ @@ -56,15 +57,13 @@ public class ConsistentHashLoadBalance extends AbstractLoadBalance { } static byte[] md5(String key) { - MessageDigest md = null; - + MessageDigest md; try { - md = MessageDigest.getInstance("md5"); + md = MessageDigest.getInstance("MD5"); byte[] bytes = key.getBytes(StandardCharsets.UTF_8); md.update(bytes); } catch (NoSuchAlgorithmException e) { - log.error("An encryption algorithm that does not exist is used: ", e); - e.printStackTrace(); + throw new IllegalStateException(e.getMessage(), e); } return md.digest(); @@ -75,7 +74,7 @@ public class ConsistentHashLoadBalance extends AbstractLoadBalance { } public String select(String rpcServiceName) { - byte[] digest = md5(rpcServiceName); + byte[] digest = md5(rpcServiceName); return selectForKey(hash(digest, 0)); } diff --git a/rpc-framework-simple/src/test/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalanceTest.java b/rpc-framework-simple/src/test/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalanceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e420477f9fc5533dfa5136c901eedb120cc5d5a8 --- /dev/null +++ b/rpc-framework-simple/src/test/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalanceTest.java @@ -0,0 +1,26 @@ +package github.javaguide.loadbalance.loadbalancer; + +import github.javaguide.extension.ExtensionLoader; +import github.javaguide.loadbalance.LoadBalance; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + + +class ConsistentHashLoadBalanceTest { + @Test + void TestConsistentHashLoadBalance() { + LoadBalance loadBalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension("loadBalance"); + List serviceUrlList = new ArrayList<>(Arrays.asList("127.0.0.1:9997", "127.0.0.1:9998", "127.0.0.1:9999")); + String userRpcServiceName = "github.javaguide.UserServicetest1version1"; + String userServiceAddress = loadBalance.selectServiceAddress(serviceUrlList, userRpcServiceName); + assertEquals("127.0.0.1:9999",userServiceAddress); + String schoolRpcServiceName = "github.javaguide.SchoolServicetest1version1"; + String schoolServiceAddress = loadBalance.selectServiceAddress(serviceUrlList, schoolRpcServiceName); + assertEquals("127.0.0.1:9997",schoolServiceAddress); + } +} \ No newline at end of file