正在显示
6 个修改的文件
包含
65 行增加
和
23 行删除
| @@ -33,11 +33,16 @@ public abstract class AbstractConsistentHash { | @@ -33,11 +33,16 @@ public abstract class AbstractConsistentHash { | ||
| 33 | */ | 33 | */ |
| 34 | protected abstract String getFirstNodeValue(String value); | 34 | protected abstract String getFirstNodeValue(String value); |
| 35 | 35 | ||
| 36 | - public void process(List<String> values){ | 36 | + public String process(List<String> values){ |
| 37 | + String key = values.get(0); | ||
| 38 | + values.remove(0) ; | ||
| 39 | + | ||
| 37 | for (String value : values) { | 40 | for (String value : values) { |
| 38 | add(hash(value), value); | 41 | add(hash(value), value); |
| 39 | } | 42 | } |
| 40 | sort(); | 43 | sort(); |
| 44 | + | ||
| 45 | + return getFirstNodeValue(key) ; | ||
| 41 | } | 46 | } |
| 42 | 47 | ||
| 43 | /** | 48 | /** |
| @@ -12,12 +12,13 @@ import java.util.List; | @@ -12,12 +12,13 @@ import java.util.List; | ||
| 12 | * @since JDK 1.8 | 12 | * @since JDK 1.8 |
| 13 | */ | 13 | */ |
| 14 | public class ConsistentHashHandle implements RouteHandle { | 14 | public class ConsistentHashHandle implements RouteHandle { |
| 15 | - | ||
| 16 | - | ||
| 17 | - | 15 | + private AbstractConsistentHash hash = new SortArrayMapConsistentHash() ; |
| 18 | 16 | ||
| 19 | @Override | 17 | @Override |
| 20 | public String routeServer(List<String> values) { | 18 | public String routeServer(List<String> values) { |
| 21 | - return null; | 19 | + String key = values.get(0); |
| 20 | + values.remove(0) ; | ||
| 21 | + hash.process(values); | ||
| 22 | + return ""; | ||
| 22 | } | 23 | } |
| 23 | } | 24 | } |
| @@ -14,18 +14,18 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash { | @@ -14,18 +14,18 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash { | ||
| 14 | private SortArrayMap sortArrayMap = new SortArrayMap(); | 14 | private SortArrayMap sortArrayMap = new SortArrayMap(); |
| 15 | 15 | ||
| 16 | @Override | 16 | @Override |
| 17 | - protected void add(long key, String value) { | 17 | + public void add(long key, String value) { |
| 18 | sortArrayMap.add(key, value); | 18 | sortArrayMap.add(key, value); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | @Override | 21 | @Override |
| 22 | - protected void sort() { | 22 | + public void sort() { |
| 23 | sortArrayMap.sort(); | 23 | sortArrayMap.sort(); |
| 24 | sortArrayMap.print(); | 24 | sortArrayMap.print(); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | @Override | 27 | @Override |
| 28 | - protected String getFirstNodeValue(String value) { | 28 | + public String getFirstNodeValue(String value) { |
| 29 | long hash = super.hash(value); | 29 | long hash = super.hash(value); |
| 30 | System.out.println("value=" + value + " hash = " + hash); | 30 | System.out.println("value=" + value + " hash = " + hash); |
| 31 | return sortArrayMap.firstNodeValue(hash); | 31 | return sortArrayMap.firstNodeValue(hash); |
| @@ -14,12 +14,12 @@ public class TreeMapConsistentHash extends AbstractConsistentHash { | @@ -14,12 +14,12 @@ public class TreeMapConsistentHash extends AbstractConsistentHash { | ||
| 14 | private TreeMap<Long,String> treeMap = new TreeMap<Long, String>() ; | 14 | private TreeMap<Long,String> treeMap = new TreeMap<Long, String>() ; |
| 15 | 15 | ||
| 16 | @Override | 16 | @Override |
| 17 | - protected void add(long key, String value) { | 17 | + public void add(long key, String value) { |
| 18 | treeMap.put(key, value); | 18 | treeMap.put(key, value); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | @Override | 21 | @Override |
| 22 | - protected String getFirstNodeValue(String value) { | 22 | + public String getFirstNodeValue(String value) { |
| 23 | long hash = super.hash(value); | 23 | long hash = super.hash(value); |
| 24 | System.out.println("value=" + value + " hash = " + hash); | 24 | System.out.println("value=" + value + " hash = " + hash); |
| 25 | SortedMap<Long, String> last = treeMap.tailMap(hash); | 25 | SortedMap<Long, String> last = treeMap.tailMap(hash); |
| 1 | package com.crossoverjie.cim.common.route.algorithm.consistenthash; | 1 | package com.crossoverjie.cim.common.route.algorithm.consistenthash; |
| 2 | 2 | ||
| 3 | +import org.junit.Assert; | ||
| 3 | import org.junit.Test; | 4 | import org.junit.Test; |
| 4 | 5 | ||
| 5 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
| @@ -14,13 +15,14 @@ public class SortArrayMapConsistentHashTest { | @@ -14,13 +15,14 @@ public class SortArrayMapConsistentHashTest { | ||
| 14 | AbstractConsistentHash map = new SortArrayMapConsistentHash() ; | 15 | AbstractConsistentHash map = new SortArrayMapConsistentHash() ; |
| 15 | 16 | ||
| 16 | List<String> strings = new ArrayList<String>(); | 17 | List<String> strings = new ArrayList<String>(); |
| 18 | + strings.add("zhangsan") ; | ||
| 17 | for (int i = 0; i < 10; i++) { | 19 | for (int i = 0; i < 10; i++) { |
| 18 | strings.add("127.0.0." + i) ; | 20 | strings.add("127.0.0." + i) ; |
| 19 | } | 21 | } |
| 20 | - map.process(strings); | 22 | + String process = map.process(strings); |
| 23 | + System.out.println(process); | ||
| 24 | + Assert.assertEquals("127.0.0.8",process); | ||
| 21 | 25 | ||
| 22 | - String firstNodeValue = map.getFirstNodeValue("zhangsan"); | ||
| 23 | - System.out.println(firstNodeValue); | ||
| 24 | } | 26 | } |
| 25 | 27 | ||
| 26 | @Test | 28 | @Test |
| @@ -28,12 +30,28 @@ public class SortArrayMapConsistentHashTest { | @@ -28,12 +30,28 @@ public class SortArrayMapConsistentHashTest { | ||
| 28 | AbstractConsistentHash map = new SortArrayMapConsistentHash() ; | 30 | AbstractConsistentHash map = new SortArrayMapConsistentHash() ; |
| 29 | 31 | ||
| 30 | List<String> strings = new ArrayList<String>(); | 32 | List<String> strings = new ArrayList<String>(); |
| 33 | + strings.add("zhangsan2"); | ||
| 31 | for (int i = 0; i < 10; i++) { | 34 | for (int i = 0; i < 10; i++) { |
| 32 | strings.add("127.0.0." + i) ; | 35 | strings.add("127.0.0." + i) ; |
| 33 | } | 36 | } |
| 34 | - map.process(strings); | 37 | + String process = map.process(strings); |
| 38 | + System.out.println(process); | ||
| 35 | 39 | ||
| 36 | - String firstNodeValue = map.getFirstNodeValue("zhangsan2"); | ||
| 37 | - System.out.println(firstNodeValue); | 40 | + Assert.assertEquals("127.0.0.4",process); |
| 41 | + } | ||
| 42 | + | ||
| 43 | + @Test | ||
| 44 | + public void getFirstNodeValue3() { | ||
| 45 | + AbstractConsistentHash map = new SortArrayMapConsistentHash() ; | ||
| 46 | + | ||
| 47 | + List<String> strings = new ArrayList<String>(); | ||
| 48 | + strings.add("1551253899106") ; | ||
| 49 | + for (int i = 0; i < 10; i++) { | ||
| 50 | + strings.add("127.0.0." + i) ; | ||
| 51 | + } | ||
| 52 | + String process = map.process(strings); | ||
| 53 | + | ||
| 54 | + System.out.println(process); | ||
| 55 | + Assert.assertEquals("127.0.0.6",process); | ||
| 38 | } | 56 | } |
| 39 | } | 57 | } |
| 1 | package com.crossoverjie.cim.common.route.algorithm.consistenthash; | 1 | package com.crossoverjie.cim.common.route.algorithm.consistenthash; |
| 2 | 2 | ||
| 3 | +import org.junit.Assert; | ||
| 3 | import org.junit.Test; | 4 | import org.junit.Test; |
| 4 | 5 | ||
| 5 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
| @@ -12,13 +13,13 @@ public class TreeMapConsistentHashTest { | @@ -12,13 +13,13 @@ public class TreeMapConsistentHashTest { | ||
| 12 | AbstractConsistentHash map = new TreeMapConsistentHash() ; | 13 | AbstractConsistentHash map = new TreeMapConsistentHash() ; |
| 13 | 14 | ||
| 14 | List<String> strings = new ArrayList<String>(); | 15 | List<String> strings = new ArrayList<String>(); |
| 16 | + strings.add("zhangsan") ; | ||
| 15 | for (int i = 0; i < 10; i++) { | 17 | for (int i = 0; i < 10; i++) { |
| 16 | strings.add("127.0.0." + i) ; | 18 | strings.add("127.0.0." + i) ; |
| 17 | } | 19 | } |
| 18 | - map.process(strings); | ||
| 19 | - | ||
| 20 | - String firstNodeValue = map.getFirstNodeValue("zhangsan"); | ||
| 21 | - System.out.println(firstNodeValue); | 20 | + String process = map.process(strings); |
| 21 | + System.out.println(process); | ||
| 22 | + Assert.assertEquals("127.0.0.8",process); | ||
| 22 | } | 23 | } |
| 23 | 24 | ||
| 24 | 25 | ||
| @@ -28,12 +29,29 @@ public class TreeMapConsistentHashTest { | @@ -28,12 +29,29 @@ public class TreeMapConsistentHashTest { | ||
| 28 | AbstractConsistentHash map = new TreeMapConsistentHash() ; | 29 | AbstractConsistentHash map = new TreeMapConsistentHash() ; |
| 29 | 30 | ||
| 30 | List<String> strings = new ArrayList<String>(); | 31 | List<String> strings = new ArrayList<String>(); |
| 32 | + strings.add("zhangsan2"); | ||
| 33 | + for (int i = 0; i < 10; i++) { | ||
| 34 | + strings.add("127.0.0." + i) ; | ||
| 35 | + } | ||
| 36 | + String process = map.process(strings); | ||
| 37 | + System.out.println(process); | ||
| 38 | + | ||
| 39 | + Assert.assertEquals("127.0.0.4",process); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + | ||
| 43 | + @Test | ||
| 44 | + public void getFirstNodeValue3() { | ||
| 45 | + AbstractConsistentHash map = new TreeMapConsistentHash() ; | ||
| 46 | + | ||
| 47 | + List<String> strings = new ArrayList<String>(); | ||
| 48 | + strings.add("1551253899106") ; | ||
| 31 | for (int i = 0; i < 10; i++) { | 49 | for (int i = 0; i < 10; i++) { |
| 32 | strings.add("127.0.0." + i) ; | 50 | strings.add("127.0.0." + i) ; |
| 33 | } | 51 | } |
| 34 | - map.process(strings); | 52 | + String process = map.process(strings); |
| 35 | 53 | ||
| 36 | - String firstNodeValue = map.getFirstNodeValue("zhangsan2"); | ||
| 37 | - System.out.println(firstNodeValue); | 54 | + System.out.println(process); |
| 55 | + Assert.assertEquals("127.0.0.6",process); | ||
| 38 | } | 56 | } |
| 39 | } | 57 | } |
-
请 注册 或 登录 后发表评论