diff --git a/service/imService.go b/service/imService.go index 017ceee..43794db 100644 --- a/service/imService.go +++ b/service/imService.go @@ -290,11 +290,12 @@ func SelectKBaseContentByQuery(imCtx *proto.IMParamContext, data *proto.WSMessag //先查看改知识库是否已经创建 key := fmt.Sprintf("kbase_%s", kbase.UUID) KBaseServerID := worker.GetRedis(key) - //若未分配 + //若未分配,从可用的知识库服务器中进行分配 + setKey := "kbase_server_id_set_is_available" //可用状态集合 if KBaseServerID == "" { - KBaseServerSet := "kbase_server_id_set" + //KBaseServerSet := "kbase_server_id_set" //进行分配 - KBaseServerID = worker.GetRedisSetRandomMember(KBaseServerSet) + KBaseServerID = worker.GetRedisSetRandomMember(setKey) if KBaseServerID == "" { return errors.New("no kbase server id") } @@ -302,7 +303,6 @@ func SelectKBaseContentByQuery(imCtx *proto.IMParamContext, data *proto.WSMessag res := worker.SetRedisWithExpire(key, KBaseServerID, time.Hour*24*7) log.Println("分配的知识库服务器ID:", KBaseServerID, "\t key:", key, "\tset:", res) } - setKey := "kbase_server_id_set_is_available" //可用状态集合 //查看KBaseServerID是否可用 isAvailable := worker.SetRedisSetIsMember(setKey, KBaseServerID) if isAvailable == false { @@ -313,14 +313,14 @@ func SelectKBaseContentByQuery(imCtx *proto.IMParamContext, data *proto.WSMessag reqChanel := fmt.Sprintf("kbase_server_id_%s", KBaseServerID) // 频道名称 reqStr, _ := json.Marshal(req) //将消息转发到对应频道 - worker.Publish(reqChanel, string(reqStr), time.Second*60) + worker.Publish(reqChanel, string(reqStr), time.Minute*3) chanel := fmt.Sprintf("kbase_%s", kbase.UUID) //获取返回消息频道 pubsub := worker.RedisClient.Subscribe(context.Background(), chanel) defer pubsub.Close() ch := pubsub.Channel() //1min定时器,超时则返回错误 - timer := time.NewTimer(time.Second * 30) + timer := time.NewTimer(time.Minute * 3) var resp proto.KnowledgeBaseServerResponse select { case m := <-ch: