Merge branch 'refs/heads/feat-knowledgebase'

This commit is contained in:
junleea 2025-04-11 14:24:12 +08:00
commit 17fc4c6001
1 changed files with 6 additions and 6 deletions

View File

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