Introducing new features.两种一致性hash 算法+轮询
正在显示
5 个修改的文件
包含
50 行增加
和
3 行删除
| 1 | package com.crossoverjie.cim.common.route.algorithm; | 1 | package com.crossoverjie.cim.common.route.algorithm; |
| 2 | 2 | ||
| 3 | +import java.util.List; | ||
| 4 | + | ||
| 3 | /** | 5 | /** |
| 4 | * Function: | 6 | * Function: |
| 5 | * | 7 | * |
| @@ -9,5 +11,5 @@ package com.crossoverjie.cim.common.route.algorithm; | @@ -9,5 +11,5 @@ package com.crossoverjie.cim.common.route.algorithm; | ||
| 9 | */ | 11 | */ |
| 10 | public interface RouteHandle { | 12 | public interface RouteHandle { |
| 11 | 13 | ||
| 12 | - String selectServer() ; | 14 | + String selectServer(List<String> values) ; |
| 13 | } | 15 | } |
| @@ -2,6 +2,8 @@ package com.crossoverjie.cim.common.route.algorithm.consistenthash; | @@ -2,6 +2,8 @@ package com.crossoverjie.cim.common.route.algorithm.consistenthash; | ||
| 2 | 2 | ||
| 3 | import com.crossoverjie.cim.common.route.algorithm.RouteHandle; | 3 | import com.crossoverjie.cim.common.route.algorithm.RouteHandle; |
| 4 | 4 | ||
| 5 | +import java.util.List; | ||
| 6 | + | ||
| 5 | /** | 7 | /** |
| 6 | * Function: | 8 | * Function: |
| 7 | * | 9 | * |
| @@ -15,7 +17,7 @@ public class ConsistentHashHandle implements RouteHandle { | @@ -15,7 +17,7 @@ public class ConsistentHashHandle implements RouteHandle { | ||
| 15 | 17 | ||
| 16 | 18 | ||
| 17 | @Override | 19 | @Override |
| 18 | - public String selectServer() { | 20 | + public String selectServer(List<String> values) { |
| 19 | return null; | 21 | return null; |
| 20 | } | 22 | } |
| 21 | } | 23 | } |
cim-common/src/main/java/com/crossoverjie/cim/common/route/algorithm/loop/LoopHandle.java
0 → 100644
| 1 | +package com.crossoverjie.cim.common.route.algorithm.loop; | ||
| 2 | + | ||
| 3 | +import com.crossoverjie.cim.common.route.algorithm.RouteHandle; | ||
| 4 | + | ||
| 5 | +import java.util.List; | ||
| 6 | +import java.util.concurrent.atomic.AtomicLong; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Function: | ||
| 10 | + * | ||
| 11 | + * @author crossoverJie | ||
| 12 | + * Date: 2019-02-27 15:13 | ||
| 13 | + * @since JDK 1.8 | ||
| 14 | + */ | ||
| 15 | +public class LoopHandle implements RouteHandle { | ||
| 16 | + private AtomicLong index = new AtomicLong(); | ||
| 17 | + | ||
| 18 | + @Override | ||
| 19 | + public String selectServer(List<String> values) { | ||
| 20 | + if (values.size() == 0) { | ||
| 21 | + throw new RuntimeException("CIM 服务器可用服务列表为空"); | ||
| 22 | + } | ||
| 23 | + Long position = index.incrementAndGet() % values.size(); | ||
| 24 | + if (position < 0) { | ||
| 25 | + position = 0L; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + return values.get(position.intValue()); | ||
| 29 | + } | ||
| 30 | +} |
| 1 | package com.crossoverjie.cim.route.config; | 1 | package com.crossoverjie.cim.route.config; |
| 2 | 2 | ||
| 3 | +import com.crossoverjie.cim.common.route.algorithm.RouteHandle; | ||
| 4 | +import com.crossoverjie.cim.common.route.algorithm.loop.LoopHandle; | ||
| 3 | import com.google.common.cache.CacheBuilder; | 5 | import com.google.common.cache.CacheBuilder; |
| 4 | import com.google.common.cache.CacheLoader; | 6 | import com.google.common.cache.CacheLoader; |
| 5 | import com.google.common.cache.LoadingCache; | 7 | import com.google.common.cache.LoadingCache; |
| @@ -73,4 +75,9 @@ public class BeanConfig { | @@ -73,4 +75,9 @@ public class BeanConfig { | ||
| 73 | .retryOnConnectionFailure(true); | 75 | .retryOnConnectionFailure(true); |
| 74 | return builder.build(); | 76 | return builder.build(); |
| 75 | } | 77 | } |
| 78 | + | ||
| 79 | + @Bean | ||
| 80 | + public RouteHandle buildRouteHandle(){ | ||
| 81 | + return new LoopHandle() ; | ||
| 82 | + } | ||
| 76 | } | 83 | } |
| @@ -5,6 +5,7 @@ import com.crossoverjie.cim.common.exception.CIMException; | @@ -5,6 +5,7 @@ import com.crossoverjie.cim.common.exception.CIMException; | ||
| 5 | import com.crossoverjie.cim.common.pojo.CIMUserInfo; | 5 | import com.crossoverjie.cim.common.pojo.CIMUserInfo; |
| 6 | import com.crossoverjie.cim.common.res.BaseResponse; | 6 | import com.crossoverjie.cim.common.res.BaseResponse; |
| 7 | import com.crossoverjie.cim.common.res.NULLBody; | 7 | import com.crossoverjie.cim.common.res.NULLBody; |
| 8 | +import com.crossoverjie.cim.common.route.algorithm.RouteHandle; | ||
| 8 | import com.crossoverjie.cim.route.cache.ServerCache; | 9 | import com.crossoverjie.cim.route.cache.ServerCache; |
| 9 | import com.crossoverjie.cim.route.service.AccountService; | 10 | import com.crossoverjie.cim.route.service.AccountService; |
| 10 | import com.crossoverjie.cim.route.service.UserInfoCacheService; | 11 | import com.crossoverjie.cim.route.service.UserInfoCacheService; |
| @@ -48,6 +49,10 @@ public class RouteController { | @@ -48,6 +49,10 @@ public class RouteController { | ||
| 48 | @Autowired | 49 | @Autowired |
| 49 | private UserInfoCacheService userInfoCacheService ; | 50 | private UserInfoCacheService userInfoCacheService ; |
| 50 | 51 | ||
| 52 | + | ||
| 53 | + @Autowired | ||
| 54 | + private RouteHandle routeHandle ; | ||
| 55 | + | ||
| 51 | @ApiOperation("群聊 API") | 56 | @ApiOperation("群聊 API") |
| 52 | @RequestMapping(value = "groupRoute", method = RequestMethod.POST) | 57 | @RequestMapping(value = "groupRoute", method = RequestMethod.POST) |
| 53 | @ResponseBody() | 58 | @ResponseBody() |
| @@ -145,7 +150,8 @@ public class RouteController { | @@ -145,7 +150,8 @@ public class RouteController { | ||
| 145 | //登录校验 | 150 | //登录校验 |
| 146 | StatusEnum status = accountService.login(loginReqVO); | 151 | StatusEnum status = accountService.login(loginReqVO); |
| 147 | if (status == StatusEnum.SUCCESS) { | 152 | if (status == StatusEnum.SUCCESS) { |
| 148 | - String server = serverCache.selectServer(); | 153 | + |
| 154 | + String server = routeHandle.selectServer(serverCache.getAll()); | ||
| 149 | String[] serverInfo = server.split(":"); | 155 | String[] serverInfo = server.split(":"); |
| 150 | CIMServerResVO vo = new CIMServerResVO(serverInfo[0], Integer.parseInt(serverInfo[1]),Integer.parseInt(serverInfo[2])); | 156 | CIMServerResVO vo = new CIMServerResVO(serverInfo[0], Integer.parseInt(serverInfo[1]),Integer.parseInt(serverInfo[2])); |
| 151 | 157 |
-
请 注册 或 登录 后发表评论