Closed samuelyao314 closed 1 year ago
当前,一致性hash 的key计算方式是固定的。
func (s consistentHashSelector) Select(ctx context.Context, servicePath, serviceMethod string, args interface{}) string { ss := s.servers if len(ss) == 0 { return "" }
key := genKey(servicePath, serviceMethod, args) selected, _ := s.h.Get(key).(string) return selected
}
业务需求是: 需要,根据玩家ID,进行一致性hash路由
err := xclient.Call(context.Background(), userid, "Mul", args, reply) if err != nil { log.Fatalf("failed to call: %v", err) }
你这种需求很常见,但是不同用户的请求对象和key各不相同,所以你在一致性哈希的基础上,实现一个自定义的Selector: https://doc.rpcx.io/part3/selector.html#user_selector
当前,一致性hash 的key计算方式是固定的。
func (s consistentHashSelector) Select(ctx context.Context, servicePath, serviceMethod string, args interface{}) string { ss := s.servers if len(ss) == 0 { return "" }
}
业务需求是: 需要,根据玩家ID,进行一致性hash路由
err := xclient.Call(context.Background(), userid, "Mul", args, reply) if err != nil { log.Fatalf("failed to call: %v", err) }