feat: 新增账号编码和HTTP连接功能

This commit is contained in:
2026-04-11 18:22:52 +08:00
parent 2f5c4f7e54
commit f8927afa9c
94 changed files with 1213 additions and 10230 deletions

91
main.go
View File

@@ -2,6 +2,7 @@ package main
import (
"context"
"customer-server/consts/public"
"customer-server/controller"
"customer-server/service"
"os"
@@ -9,10 +10,12 @@ import (
"syscall"
_ "gitea.com/red-future/common/config"
"gitea.com/red-future/common/http"
"gitea.com/red-future/common/jaeger"
"gitea.com/red-future/common/rabbitmq"
"gitea.com/red-future/common/utils"
gmq "github.com/bjang03/gmq/core/gmq"
"github.com/bjang03/gmq/mq"
"github.com/bjang03/gmq/types"
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
"github.com/gogf/gf/v2/frame/g"
@@ -23,78 +26,42 @@ func main() {
ctx := context.Background()
defer jaeger.ShutDown(ctx)
// 提前初始化实例队列名,确保全局唯一
baseQueue := g.Cfg().MustGet(ctx, "rabbitmq.responseQueue", "ragflow.response.queue").String()
instanceQueue := rabbitmq.GetInstanceQueueName(baseQueue)
glog.Infof(ctx, "🔧 实例队列名已初始化: %s", instanceQueue)
// 初始化Consul配置监听咨询方向配置
service.InitConsulWatcher(ctx)
// 路由注册common/http init() 已异步启动服务器,这里注册路由不影响)
http.RouteRegister([]interface{}{
controller.Account,
controller.ScriptedSpeech,
controller.AccountWebsocket,
controller.Health,
controller.Archive,
controller.CustomerServiceAccount,
controller.Data,
controller.DataStatistics,
controller.Product,
controller.Speechcraft,
controller.Websocket,
controller.Webhook,
controller.RAGFlowConfig,
controller.RAGFlow, // RAGFlow HTTP处理接口从message迁移
controller.XiaohongshuController, // 小红书Webhook接口
controller.AccountHttp,
})
//// 初始化消费者管理器并注册所有消费者
//mgr := rabbitmq.NewConsumerManager(ctx)
//
//// 注册响应消费者
//responseConsumer := service.NewResponseConsumer(ctx)
//mgr.Register("响应消费者", responseConsumer.Start, responseConsumer.Stop)
//
//// 注册追问消费者
//followUpConsumer := service.NewFollowUpConsumer(ctx)
//mgr.Register("追问消费者", followUpConsumer.Start, followUpConsumer.Stop)
//
//// 注册会话归档消费者
//sessionArchiveConsumer := service.NewSessionArchiveConsumer(ctx)
//mgr.Register("会话归档消费者", sessionArchiveConsumer.Start, sessionArchiveConsumer.Stop)
//
//// 注册延时落库消费者
//delayedFlushConsumer := service.NewDelayedFlushConsumer(ctx)
//mgr.Register("延时落库消费者", delayedFlushConsumer.Start, delayedFlushConsumer.Stop)
//
//// 初始化并启动所有消费者
//if err := mgr.Init(); err != nil {
// glog.Fatalf(ctx, "消费者管理器初始化失败: %v", err)
//}
//
//// 初始化 ES 客户端
//if !g.Cfg().MustGet(ctx, "elasticsearch").IsEmpty() {
// if err := elasticsearch.Init(ctx); err != nil {
// glog.Warningf(ctx, "ES 初始化失败(月度归档功能不可用): %v", err)
// }
//}
//
//// 启动月度归档定时任务
//if !g.Cfg().MustGet(ctx, "mongo").IsEmpty() && !g.Cfg().MustGet(ctx, "elasticsearch").IsEmpty() {
// service.ArchiveService.StartCron(ctx)
//}
if err := utils.InitGseTool(ctx); err != nil {
g.Log().Error(ctx, "gse 分词工具初始化失败:", err)
}
gmq.GmqRegister(public.GmqMsgPluginsName, &mq.NatsConn{
NatsConfig: mq.NatsConfig{
Addr: g.Cfg().MustGet(ctx, "nats.default.addr").String(),
Port: g.Cfg().MustGet(ctx, "nats.default.port").String(),
},
})
if err := gmq.GetGmq(public.GmqMsgPluginsName).GmqSubscribe(ctx, &mq.NatsSubMessage{
SubMessage: types.SubMessage{
Topic: public.AccountFollowupTopic,
ConsumerName: public.AccountFollowupConsumer,
AutoAck: public.AccountFollowupAck,
FetchCount: public.AccountFollowupCount,
HandleFunc: service.AccountWebSocket.AccountMsg,
},
IsDelayMsg: true,
}); err != nil {
return
}
// 监听系统信号,支持 Ctrl+C 优雅退出
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
glog.Info(ctx, "收到停止信号,正在关闭服务...")
glog.Info(ctx, "正在关闭服务...")
// 停止所有消费者并关闭RabbitMQ连接
//mgr.Stop()
glog.Info(ctx, "customerservice 服务已停止")
}