From 251d7a4c3392c569136b121dc38ea3390a99efa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=9F=E9=93=81?= <1060287354@qq.com> Date: Wed, 19 Aug 2020 17:08:12 +0800 Subject: [PATCH] =?UTF-8?q?update=20WorkerInfoHolder.java,=20use=20Consist?= =?UTF-8?q?entHash=20=E4=BD=BF=E7=94=A8=E4=B8=80=E8=87=B4=E6=80=A7hash?= =?UTF-8?q?=EF=BC=8C=E6=9B=BF=E4=BB=A3hash=E5=8F=96=E6=A8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对应: client会启动一个定时任务,每500ms(可设置)就批量发送一次待测key到对应的worker机器,发送规则是key的hashcode 对worker数量取余 --- .../hotkey/client/core/worker/WorkerInfoHolder.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/src/main/java/com/jd/platform/hotkey/client/core/worker/WorkerInfoHolder.java b/client/src/main/java/com/jd/platform/hotkey/client/core/worker/WorkerInfoHolder.java index 72471a9..56e52b8 100644 --- a/client/src/main/java/com/jd/platform/hotkey/client/core/worker/WorkerInfoHolder.java +++ b/client/src/main/java/com/jd/platform/hotkey/client/core/worker/WorkerInfoHolder.java @@ -1,5 +1,6 @@ package com.jd.platform.hotkey.client.core.worker; +import cn.hutool.core.lang.ConsistentHash; import cn.hutool.core.util.StrUtil; import com.jd.platform.hotkey.client.log.JdLogger; import com.jd.platform.hotkey.client.netty.NettyClient; @@ -60,9 +61,9 @@ public class WorkerInfoHolder { if (StrUtil.isEmpty(key) || WORKER_HOLDER.size() == 0) { return null; } - int index = Math.abs(key.hashCode() % WORKER_HOLDER.size()); - - return WORKER_HOLDER.get(index).channel; + //使用一致性hash + ConsistentHash consistentHash = new ConsistentHash(3, WORKER_HOLDER); + return consistentHash.get(key).channel; } /** -- Gitee