diff --git a/net/src/main/java/com/zfoo/net/session/model/Session.java b/net/src/main/java/com/zfoo/net/session/model/Session.java index 54994588..9d0f268c 100644 --- a/net/src/main/java/com/zfoo/net/session/model/Session.java +++ b/net/src/main/java/com/zfoo/net/session/model/Session.java @@ -96,8 +96,8 @@ public class Session implements Closeable { } - public Object getAttribute(AttributeType key) { - return attributes.get(key); + public T getAttribute(AttributeType key) { + return (T) attributes.get(key); } public Channel getChannel() { diff --git a/net/src/main/java/com/zfoo/net/task/dispatcher/ConsistentHashTaskDispatch.java b/net/src/main/java/com/zfoo/net/task/dispatcher/ConsistentHashTaskDispatch.java index 17d0cd8b..e26a2994 100644 --- a/net/src/main/java/com/zfoo/net/task/dispatcher/ConsistentHashTaskDispatch.java +++ b/net/src/main/java/com/zfoo/net/task/dispatcher/ConsistentHashTaskDispatch.java @@ -13,6 +13,7 @@ package com.zfoo.net.task.dispatcher; +import com.zfoo.net.session.model.AttributeType; import com.zfoo.net.task.TaskBus; import com.zfoo.net.task.model.PacketReceiverTask; @@ -35,7 +36,14 @@ public class ConsistentHashTaskDispatch extends AbstractTaskDispatch { var attachment = packetReceiverTask.getAttachment(); if (attachment == null) { - return SessionIdTaskDispatch.getInstance().getExecutor(packetReceiverTask); + var session = packetReceiverTask.getSession(); + Long uid = session.getAttribute(AttributeType.UID); + + if (uid == null) { + return SessionIdTaskDispatch.getInstance().getExecutor(packetReceiverTask); + } else { + return TaskBus.executor(Math.toIntExact(uid)); + } } // 可见最终是根据附加包的信息选择服务端由哪个线程执行这个业务