From ba3e10813a6f2d33f78513a20b9f6553f41d79fd Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Tue, 27 Jun 2023 10:50:01 +0800 Subject: [PATCH] Organize configuration files and configuration items, and remove redundant fields. --- cmd/api/main.go | 3 - config/config.yaml | 266 ++++++++--------- internal/msgtransfer/modify_msg_handler.go | 2 +- .../msgtransfer/online_history_msg_handler.go | 4 +- .../online_msg_to_mongo_handler.go | 2 +- .../msgtransfer/persistent_msg_handler.go | 4 +- internal/push/offlinepush/getui/body.go | 4 +- internal/push/offlinepush/getui/push.go | 17 +- internal/push/push_handler.go | 2 +- internal/push/push_to_client.go | 6 +- internal/rpc/user/user.go | 4 +- pkg/common/config/config.go | 272 ++++++++---------- pkg/common/db/controller/msg.go | 10 +- pkg/common/mw/check.go | 2 +- pkg/common/mw/check_test.go | 2 +- pkg/startrpc/start.go | 4 +- 16 files changed, 268 insertions(+), 336 deletions(-) diff --git a/cmd/api/main.go b/cmd/api/main.go index 260642a48..542730245 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -45,9 +45,6 @@ func startPprof() { } func run(port int) error { - if port == 0 { - port = config.Config.Api.GinPort[0] - } var err error rdb, err := cache.NewRedis() if err != nil { diff --git a/config/config.yaml b/config/config.yaml index ce58921a8..be0893af5 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,67 +1,56 @@ -# The class cannot be named by Pascal or camel case. -# If it is not used, the corresponding structure will not be set, -# and it will not be read naturally. -serverversion: 2.3.7 +# OpenIM config + + #---------------Infrastructure configuration---------------------# zookeeper: - schema: openim #默认即可 - zkAddr: [ 127.0.0.1:2181 ] #单机部署时,默认即可 + schema: openim #默认即可 + address: [ 127.0.0.1:2181 ] # userName: password: mysql: - dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 - dbMysqlUserName: root #mysql用户名,建议修改 - dbMysqlPassword: openIM123 # mysql密码,建议修改 - dbMysqlDatabaseName: openIM_v2 #默认即可 - dbTableName: eMsg #默认即可 - dbMsgTableNum: 1 - dbMaxOpenConns: 100 - dbMaxIdleConns: 10 - dbMaxLifeTime: 5 - logLevel: 4 #1=slient 2=error 3=warn 4=info - slowThreshold: 500 + address: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可 + userName: root #mysql用户名,建议修改 + password: openIM123 # mysql密码,建议修改 + databaseName: openIM_v2 #默认即可 + maxOpenConns: 100 # + maxIdleConns: 10 # + maxLifeTime: 5 # + logLevel: 4 # 1=slient 2=error 3=warn 4=info + slowThreshold: 500 # 毫秒 mongo: - dbUri: ""#当dbUri值不为空则直接使用该值 - dbAddress: [ 127.0.0.1:37017 ] #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 - dbDirect: false - dbTimeout: 60 - dbDatabase: openIM #mongo db 默认即可 - dbSource: admin - dbUserName: root #mongo用户名,建议先不设置 - dbPassword: openIM123 #mongo密码,建议先不设置 - dbMaxPoolSize: 100 - dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 - chatRecordsClearTime: "0 2 * * 3" # 每周三凌晨2点清除消息,该配置和linux定时任务一样, 清理操作建议设置在用户活跃少的时候 # 0 3 * * * + uri: #不为空则直接使用该值 + address: [ 127.0.0.1:37017 ] #单机时为mongo地址,使用分片集群时,为mongos地址 默认即可 + timeout: 60 + database: openIM #mongo db 默认即可 + source: admin + userName: root #mongo用户名,建议先不设置 + password: openIM123 #mongo密码,建议先不设置 + maxPoolSize: 100 + retainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改 + chatRecordsClearTime: "0 2 * * 3" #每周三凌晨2点清除mongo中的过期消息,该配置和linux定时任务一样 redis: - dbAddress: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 - dbMaxIdle: 128 - dbMaxActive: 0 - dbIdleTimeout: 120 - dbUserName: #only redis version 6.0+ need username - dbPassWord: openIM123 #redis密码 建议修改 - enableCluster: false #如果外部redis以集群方式启动,需要打开此开关 + address: [ 127.0.0.1:16379 ] #redis地址 单机时,填写一个地址即可,使用redis集群时候,填写集群中多个节点地址(主从地址都可以填写,增加容灾能力),默认即可 + userName: #only redis version 6.0+ need username + passWord: openIM123 #redis密码 建议修改 kafka: SASLUserName: SASLPassword: - ws2mschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 - topic: "ws2ms_chat" #用于mongo和mysql保存消息 - msgtomongo: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 - topic: "msg_to_mongo" - ms2pschat: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 - topic: "ms2ps_chat" #消息push - msgtomodify: - addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 - topic: "msg_to_modify" - consumergroupid: - msgToTransfer: mongo - msgToMongo: mongo_ex + addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可 + latestMsgToRedis: + topic: "latestMsgToRedis" # + offlineMsgToMongoMysql: + topic: "offlineMsgToMongoMysql" #用于mongo和mysql保存消息 + msqToPush: + topic: "msqToPush" #消息push + msgToModify: + topic: "msgToModify" #消息push + consumerGroupID: + msgToRedis: redis + msgToMongo: mongo msgToMySql: mysql msgToPush: push msgToModify: modify @@ -69,42 +58,36 @@ kafka: #---------------Internal service configuration---------------------# -# The service ip default is empty, -# automatically obtain the machine's valid network card ip as the service ip, -# otherwise the configuration ip is preferred -#如果是单机模式,用0.0.0.0或者不填,默认即可 -#作为rpc时,注册到etcd的地址,单机默认即可,如果是集群部署,需要修改(具体使用内网地址还是外网地址,要依情况而定,目的是api/gateway能访问到) -rpcRegisterIP: -#默认即可 -listenIP: 0.0.0.0 + + +rpc: + registerIP: #作为rpc启动时,注册到zookeeper的IP,api/gateway能访问到此ip和对应的rpcPort中的端口 + listenIP: #如不设置则为 0.0.0.0 api: - openImApiPort: [ 10002 ] #api服务端口,默认即可,需要开放此端口或做nginx转发 - listenIP: 0.0.0.0 + openImApiPort: [ 10002 ] #api服务端口 + listenIP: sdk: - openImSdkWsPort: [ 10003 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发 + openImSdkWsPort: [ 10003 ] #jssdk服务端口 dataDir: [ ../db/sdk/ ] openImWsAddress: ws://127.0.0.1:10001 openImApiAddress: http://127.0.0.1:10002 -#对象存储服务,以下配置二选一,目前支持两种,腾讯云和minio,二者配置好其中一种即可(如果使用minio参考https://doc.rentsoft.cn/#/qa/minio搭建minio服务器) -credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改 - object: enable: minio apiURL: http://127.0.0.1:10002/third/object - minio: #MinIO 发送图片、视频、文件时需要,请自行申请后替换,必须修改。 客户端初始化InitSDK,中 object_storage参数为minio + minio: tempBucket: "openim" dataBucket: "openim" location: us-east-1 - endpoint: http://127.0.0.1:10005 #minio外网ip 这个ip是给客户端访问的 + endpoint: http://127.0.0.1:10005 #minio外网ip 这个ip是给客户端访问的 accessKeyID: root secretAccessKey: openIM123 - isDistributedMod: false # 是否分布式多硬盘部署 默认docker-compose中为false,如果是多硬盘部署,需要修改为true + isDistributedMod: false #是否分布式多硬盘部署 默认docker-compose中为false,如果是多硬盘部署,需要修改为true tencent: appID: region: @@ -131,7 +114,7 @@ object: externalId: #角色扩展Id roleSessionName: #角色SESSION名称 -rpcport: #rpc服务端口 默认即可 +rpcPort: #rpc服务端口 默认即可 openImUserPort: [ 10110 ] openImFriendPort: [ 10120 ] openImMessagePort: [ 10130 ] @@ -143,7 +126,7 @@ rpcport: #rpc服务端口 默认即可 openImRtcPort: [ 10190 ] openImThirdPort: [ 10200 ] -rpcregistername: #rpc注册服务名,默认即可 +rpcRegisterName: #rpc注册服务名,默认即可 openImUserName: User openImFriendName: Friend openImMsgName: Msg @@ -158,65 +141,44 @@ rpcregistername: #rpc注册服务名,默认即可 log: storageLocation: ../logs/ rotationTime: 24 - remainRotationCount: 2 #日志数量 - #日志级别 6表示全都打印,测试阶段建议设置为6 - remainLogLevel: 6 + remainRotationCount: 2 #日志数量 + remainLogLevel: 6 #日志级别 6表示全都打印,测试阶段建议设置为6 isStdout: false isJson: false withStack: false -modulename: #日志文件按模块命名,默认即可 - longConnSvrName: msg_gateway - msgTransferName: msg_transfer - pushName: push -longconnsvr: - openImWsPort: [ 10001 ] # ws服务端口,默认即可,要开放此端口或做nginx转发 +longConnSvr: + openImWsPort: [ 10001 ] #ws服务端口,默认即可,要开放此端口或做nginx转发 websocketMaxConnNum: 10000 websocketMaxMsgLen: 4096 websocketTimeOut: 10 -## 推送只能开启一个 enable代表开启 push: - tpns: #腾讯推送,暂未测试 暂不要使用 - ios: - accessID: 1600018281 - secretKey: 3cd68a77a95b89e5089a1aca523f318f - android: - accessID: 111 - secretKey: 111 - enable: false # true or false (bool) - jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改 - appKey: - masterSecret: - pushUrl: - pushIntent: - enable: false # true or false (bool) - getui: #个推推送 + enable: getui + geTui: #个推推送 pushUrl: "https://restapi.getui.com/v2/$appId" masterSecret: "" appKey: "" intent: "" - enable: false # true or false (bool) channelID: "" channelName: "" - fcm: #firebase cloud message 消息推送 + fcm: #firebase cloud message 消息推送 serviceAccount: "openim-5c6c0-firebase-adminsdk-ppwol-8765884a78.json" #帐号文件,此处需要改修配置,并且这个文件放在 config目录下 - enable: false manager: - #app管理员userID和对应的secret 建议修改。 用于管理后台登录,也可以用户管理后台对应的api - appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin" ] - nickname: [ "系统通知","openIM654321", "openIM333", "openIMAdmin" ] + #app管理员userID和nickename, 用于管理后台登录 + appManagerUserID: [ "openIM123456","openIM654321","openIMAdmin" ] + appManagerNickname: [ "system1","system2", "system3" ] + -secret: tuoyun # 多端互踢策略 # 1:多平台登录:Android、iOS、Windows、Mac 每种平台只能一个在线,web端可以多个同时在线 -multiloginpolicy: 1 +multiLoginPolicy: 1 #msg log insert to db -chatpersistencemysql: true +chatPersistenceMysql: true #消息缓存时间 msgCacheTimeout: 86400 #群聊已读开启 @@ -225,82 +187,82 @@ groupMessageHasReadReceiptEnable: true singleMessageHasReadReceiptEnable: true #token config -tokenpolicy: - accessSecret: "OpenIM_server" #token生成相关,默认即可 +tokenPolicy: + accessSecret: openIM123 #token生成相关,默认即可 # Token effective time day as a unit accessExpire: 90 #token过期时间(天) 默认即可 -messageverify: + +messageVerify: friendVerify: false #ios系统推送声音以及标记计数 -iospush: +iosPush: pushSound: "xxx" badgeCount: true production: false callback: # callback url 需要自行更换callback url - callbackUrl: "http://127.0.0.1:10008/callback/open_im" - # 开启关闭操作前后回调的配置 - callbackBeforeSendSingleMsg: + url: + beforeSendSingleMsg: enable: false # 回调是否启用 - callbackTimeOut: 2 # 回调超时时间 - callbackFailedContinue: true # 回调超时是否继续执行代码 - callbackAfterSendSingleMsg: + timeout: 5 #callback超时时间(秒) + failedContinue: true #如果callback失败是否继续 + afterSendSingleMsg: enable: false - callbackTimeOut: 2 - callbackBeforeSendGroupMsg: + timeout: 5 + beforeSendGroupMsg: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true - callbackAfterSendGroupMsg: + timeout: 5 + failedContinue: true + afterSendGroupMsg: enable: false - callbackTimeOut: 2 - callbackMsgModify: + timeout: 5 + msgModify: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true - callbackUserOnline: + timeout: 5 + failedContinue: true + userOnline: enable: false - callbackTimeOut: 2 - callbackUserOffline: + timeout: 5 + userOffline: enable: false - callbackTimeOut: 2 - callbackUserKickOff: + timeout: 5 + userKickOff: enable: false - callbackTimeOut: 2 - callbackOfflinePush: + timeout: 5 + offlinePush: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续离线推送 - callbackOnlinePush: + timeout: 5 + failedContinue: true + onlinePush: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续离线推送 - callbackSuperGroupOnlinePush: + timeout: 5 + failedContinue: true + superGroupOnlinePush: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续离线推送 - callbackBeforeAddFriend: + timeout: 5 + failedContinue: true + beforeAddFriend: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续 - callbackBeforeCreateGroup: + timeout: 5 + failedContinue: true + beforeCreateGroup: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续 - callbackBeforeMemberJoinGroup: + timeout: 5 + failedContinue: true + beforeMemberJoinGroup: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续 - callbackBeforeSetGroupMemberInfo: + timeout: 5 + failedContinue: true + beforeSetGroupMemberInfo: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续 - callbackSetMessageReactionExtensions: + timeout: 5 + failedContinue: true + setMessageReactionExtensions: enable: false - callbackTimeOut: 2 - callbackFailedContinue: true # 回调超时是否继续 + timeout: 5 + failedContinue: true # prometheus每个服务监听的端口数量需要和rpc port保持一致 prometheus: diff --git a/internal/msgtransfer/modify_msg_handler.go b/internal/msgtransfer/modify_msg_handler.go index 605d119ae..0b9ad2aff 100644 --- a/internal/msgtransfer/modify_msg_handler.go +++ b/internal/msgtransfer/modify_msg_handler.go @@ -30,7 +30,7 @@ func NewModifyMsgConsumerHandler(database controller.ExtendMsgDatabase) *ModifyM return &ModifyMsgConsumerHandler{ modifyMsgConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToModify.Topic}, - config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.ConsumerGroupID.MsgToModify), + config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToModify), extendMsgDatabase: database, } } diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 94facfef3..7f776d5ee 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -75,8 +75,8 @@ func NewOnlineHistoryRedisConsumerHandler(database controller.CommonMsgDatabase, och.conversationRpcClient = conversationRpcClient och.groupRpcClient = groupRpcClient och.historyConsumerGroup = kafka.NewMConsumerGroup(&kafka.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, - config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToRedis) + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.LatestMsgToRedis.Topic}, + config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToRedis) //statistics.NewStatistics(&och.singleMsgSuccessCount, config.Config.ModuleName.MsgTransferName, fmt.Sprintf("%d second singleMsgCount insert to mongo", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) return &och } diff --git a/internal/msgtransfer/online_msg_to_mongo_handler.go b/internal/msgtransfer/online_msg_to_mongo_handler.go index 5d052fac4..77c5e9a6b 100644 --- a/internal/msgtransfer/online_msg_to_mongo_handler.go +++ b/internal/msgtransfer/online_msg_to_mongo_handler.go @@ -21,7 +21,7 @@ func NewOnlineHistoryMongoConsumerHandler(database controller.CommonMsgDatabase) mc := &OnlineHistoryMongoConsumerHandler{ historyConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToMongo.Topic}, - config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo), + config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo), msgDatabase: database, } return mc diff --git a/internal/msgtransfer/persistent_msg_handler.go b/internal/msgtransfer/persistent_msg_handler.go index 6d9b64a13..026f5f5a0 100644 --- a/internal/msgtransfer/persistent_msg_handler.go +++ b/internal/msgtransfer/persistent_msg_handler.go @@ -29,8 +29,8 @@ type PersistentConsumerHandler struct { func NewPersistentConsumerHandler(database controller.ChatLogDatabase) *PersistentConsumerHandler { return &PersistentConsumerHandler{ persistentConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ws2mschat.Topic}, - config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMySql), + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.LatestMsgToRedis.Topic}, + config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMySql), chatLogDatabase: database, } } diff --git a/internal/push/offlinepush/getui/body.go b/internal/push/offlinepush/getui/body.go index 6cee9a545..b7a4bc082 100644 --- a/internal/push/offlinepush/getui/body.go +++ b/internal/push/offlinepush/getui/body.go @@ -124,8 +124,8 @@ func newPushReq(title, content string) PushReq { Title: title, Body: content, ClickType: "startapp", - ChannelID: config.Config.Push.Getui.ChannelID, - ChannelName: config.Config.Push.Getui.ChannelName, + ChannelID: config.Config.Push.GeTui.ChannelID, + ChannelName: config.Config.Push.GeTui.ChannelName, }}} return pushReq } diff --git a/internal/push/offlinepush/getui/push.go b/internal/push/offlinepush/getui/push.go index 6eb0b0fdf..db5accbd7 100644 --- a/internal/push/offlinepush/getui/push.go +++ b/internal/push/offlinepush/getui/push.go @@ -1,8 +1,13 @@ package getui import ( + "github.com/go-redis/redis" "sync" + "context" + "crypto/sha256" + "encoding/hex" + "errors" "github.com/OpenIMSDK/Open-IM-Server/internal/push/offlinepush" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" @@ -11,12 +16,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils/splitter" - "github.com/redis/go-redis/v9" - - "context" - "crypto/sha256" - "encoding/hex" - "errors" "strconv" "time" @@ -98,12 +97,12 @@ func (g *Client) Push(ctx context.Context, userIDs []string, title, content stri func (g *Client) Auth(ctx context.Context, timeStamp int64) (token string, expireTime int64, err error) { h := sha256.New() - h.Write([]byte(config.Config.Push.Getui.AppKey + strconv.Itoa(int(timeStamp)) + config.Config.Push.Getui.MasterSecret)) + h.Write([]byte(config.Config.Push.GeTui.AppKey + strconv.Itoa(int(timeStamp)) + config.Config.Push.GeTui.MasterSecret)) sign := hex.EncodeToString(h.Sum(nil)) reqAuth := AuthReq{ Sign: sign, Timestamp: strconv.Itoa(int(timeStamp)), - AppKey: config.Config.Push.Getui.AppKey, + AppKey: config.Config.Push.GeTui.AppKey, } respAuth := AuthResp{} err = g.request(ctx, authURL, reqAuth, "", &respAuth) @@ -146,7 +145,7 @@ func (g *Client) request(ctx context.Context, url string, input interface{}, tok header := map[string]string{"token": token} resp := &Resp{} resp.Data = output - return g.postReturn(ctx, config.Config.Push.Getui.PushUrl+url, header, input, resp, 3) + return g.postReturn(ctx, config.Config.Push.GeTui.PushUrl+url, header, input, resp, 3) } func (g *Client) postReturn(ctx context.Context, url string, header map[string]string, input interface{}, output RespI, timeout int) error { diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index 29dc9a4b6..71201ede0 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -23,7 +23,7 @@ func NewConsumerHandler(pusher *Pusher) *ConsumerHandler { var consumerHandler ConsumerHandler consumerHandler.pusher = pusher consumerHandler.pushConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, - OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ms2pschat.Topic}, config.Config.Kafka.Ms2pschat.Addr, + OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.Ms2pschat.Topic}, config.Config.Kafka.Addr, config.Config.Kafka.ConsumerGroupID.MsgToPush) return &consumerHandler } diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index 4383c336a..9cc375026 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -57,7 +57,7 @@ func NewPusher(discov discoveryregistry.SvcDiscoveryRegistry, offlinePusher offl func NewOfflinePusher(cache cache.MsgModel) offlinepush.OfflinePusher { var offlinePusher offlinepush.OfflinePusher - if config.Config.Push.Getui.Enable { + if config.Config.Push.GeTui.Enable { offlinePusher = getui.NewClient(cache) } if config.Config.Push.Fcm.Enable { @@ -164,8 +164,8 @@ func (p *Pusher) Push2SuperGroup(ctx context.Context, groupID string, msg *sdkws return err } log.ZInfo(ctx, "GroupDismissedNotificationInfo****", "groupID", groupID, "num", len(pushToUserIDs), "list", pushToUserIDs) - if len(config.Config.Manager.AppManagerUid) > 0 { - ctx = mcontext.WithOpUserIDContext(ctx, config.Config.Manager.AppManagerUid[0]) + if len(config.Config.Manager.AppManagerUserID) > 0 { + ctx = mcontext.WithOpUserIDContext(ctx, config.Config.Manager.AppManagerUserID[0]) } defer func(groupID string) { if err := p.groupRpcClient.DismissGroup(ctx, groupID); err != nil { diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index bc7be1f47..b2a2b88f1 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -45,10 +45,10 @@ func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error { return err } users := make([]*tablerelation.UserModel, 0) - if len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname) { + if len(config.Config.Manager.AppManagerUserID) != len(config.Config.Manager.Nickname) { return errs.ErrConfig.Wrap("len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname)") } - for k, v := range config.Config.Manager.AppManagerUid { + for k, v := range config.Config.Manager.AppManagerUserID { users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k]}) } userDB := relation.NewUserGorm(db) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index d47889fd5..f792d2636 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -36,8 +36,8 @@ var Config config type CallBackConfig struct { Enable bool `yaml:"enable"` - CallbackTimeOut int `yaml:"callbackTimeOut"` - CallbackFailedContinue *bool `yaml:"callbackFailedContinue"` + CallbackTimeOut int `yaml:"timeout"` + CallbackFailedContinue *bool `yaml:"failedContinue"` } type NotificationConf struct { @@ -55,22 +55,81 @@ type POfflinePush struct { } type config struct { - ServerIP string `yaml:"serverip"` + Zookeeper struct { + Schema string `yaml:"schema"` + ZkAddr []string `yaml:"address"` + UserName string `yaml:"userName"` + Password string `yaml:"password"` + } `yaml:"zookeeper"` + + Mysql struct { + DBAddress []string `yaml:"address"` + DBUserName string `yaml:"userName"` + DBPassword string `yaml:"password"` + DBDatabaseName string `yaml:"databaseName"` + DBMaxOpenConns int `yaml:"maxOpenConns"` + DBMaxIdleConns int `yaml:"maxIdleConns"` + DBMaxLifeTime int `yaml:"maxLifeTime"` + LogLevel int `yaml:"logLevel"` + SlowThreshold int `yaml:"slowThreshold"` + } `yaml:"mysql"` + + Mongo struct { + DBUri string `yaml:"uri"` + DBAddress []string `yaml:"address"` + DBTimeout int `yaml:"timeout"` + DBDatabase string `yaml:"database"` + DBSource string `yaml:"source"` + DBUserName string `yaml:"userName"` + DBPassword string `yaml:"password"` + DBMaxPoolSize int `yaml:"maxPoolSize"` + DBRetainChatRecords int `yaml:"retainChatRecords"` + ChatRecordsClearTime string `yaml:"chatRecordsClearTime"` + } `yaml:"mongo"` + + Redis struct { + DBAddress []string `yaml:"address"` + DBUserName string `yaml:"userName"` + DBPassWord string `yaml:"passWord"` + } `yaml:"redis"` + + Kafka struct { + SASLUserName string `yaml:"SASLUserName"` + SASLPassword string `yaml:"SASLPassword"` + Addr []string `yaml:"addr"` + LatestMsgToRedis struct { + Topic string `yaml:"topic"` + } `yaml:"latestMsgToRedis"` + OfflineMsgToMongoMysql struct { + Topic string `yaml:"topic"` + } `yaml:"offlineMsgToMongoMysql"` + MsqToPush struct { + Topic string `yaml:"topic"` + } `yaml:"msqToPush"` + MsgToModify struct { + Topic string `yaml:"topic"` + } `yaml:"msgToModify"` + ConsumerGroupID struct { + MsgToRedis string `yaml:"msgToRedis"` + MsgToMongo string `yaml:"msgToMongo"` + MsgToMySql string `yaml:"msgToMySql"` + MsgToPush string `yaml:"msgToPush"` + MsgToModify string `yaml:"msgToModify"` + } `yaml:"consumerGroupID"` + } `yaml:"kafka"` - RpcRegisterIP string `yaml:"rpcRegisterIP"` - ListenIP string `yaml:"listenIP"` + Rpc struct { + RegisterIP string `yaml:"registerIP"` + ListenIP string `yaml:"listenIP"` + } `yaml:"rpc"` - ServerVersion string `yaml:"serverversion"` - Api struct { - GinPort []int `yaml:"openImApiPort"` + Api struct { ListenIP string `yaml:"listenIP"` - } + } `yaml:"api"` + Sdk struct { - WsPort []int `yaml:"openImSdkWsPort"` DataDir []string `yaml:"dataDir"` - } - Credential struct { - } + } `yaml:"sdk"` Object struct { Enable string `yaml:"enable"` @@ -90,7 +149,7 @@ type config struct { Bucket string `yaml:"bucket"` SecretID string `yaml:"secretID"` SecretKey string `yaml:"secretKey"` - } + } `yaml:"tencent"` Ali struct { RegionID string `yaml:"regionID"` AccessKeyID string `yaml:"accessKeyID"` @@ -101,7 +160,7 @@ type config struct { FinalHost string `yaml:"finalHost"` StsDurationSeconds int64 `yaml:"stsDurationSeconds"` OssRoleArn string `yaml:"OssRoleArn"` - } + } `yaml:"ali"` Aws struct { AccessKeyID string `yaml:"accessKeyID"` AccessKeySecret string `yaml:"accessKeySecret"` @@ -112,56 +171,10 @@ type config struct { ExternalId string `yaml:"externalId"` RoleSessionName string `yaml:"roleSessionName"` } `yaml:"aws"` - } + } `yaml:"object"` - Mysql struct { - DBAddress []string `yaml:"dbMysqlAddress"` - DBUserName string `yaml:"dbMysqlUserName"` - DBPassword string `yaml:"dbMysqlPassword"` - DBDatabaseName string `yaml:"dbMysqlDatabaseName"` - DBTableName string `yaml:"DBTableName"` - DBMsgTableNum int `yaml:"dbMsgTableNum"` - DBMaxOpenConns int `yaml:"dbMaxOpenConns"` - DBMaxIdleConns int `yaml:"dbMaxIdleConns"` - DBMaxLifeTime int `yaml:"dbMaxLifeTime"` - LogLevel int `yaml:"logLevel"` - SlowThreshold int `yaml:"slowThreshold"` - } - Mongo struct { - DBUri string `yaml:"dbUri"` - DBAddress []string `yaml:"dbAddress"` - DBDirect bool `yaml:"dbDirect"` - DBTimeout int `yaml:"dbTimeout"` - DBDatabase string `yaml:"dbDatabase"` - DBSource string `yaml:"dbSource"` - DBUserName string `yaml:"dbUserName"` - DBPassword string `yaml:"dbPassword"` - DBMaxPoolSize int `yaml:"dbMaxPoolSize"` - DBRetainChatRecords int `yaml:"dbRetainChatRecords"` - ChatRecordsClearTime string `yaml:"chatRecordsClearTime"` - } - Redis struct { - DBAddress []string `yaml:"dbAddress"` - DBMaxIdle int `yaml:"dbMaxIdle"` - DBMaxActive int `yaml:"dbMaxActive"` - DBIdleTimeout int `yaml:"dbIdleTimeout"` - DBUserName string `yaml:"dbUserName"` - DBPassWord string `yaml:"dbPassWord"` - EnableCluster bool `yaml:"enableCluster"` - } RpcPort struct { - OpenImUserPort []int `yaml:"openImUserPort"` - OpenImFriendPort []int `yaml:"openImFriendPort"` - OpenImMessagePort []int `yaml:"openImMessagePort"` - OpenImMessageGatewayPort []int `yaml:"openImMessageGatewayPort"` - OpenImGroupPort []int `yaml:"openImGroupPort"` - OpenImAuthPort []int `yaml:"openImAuthPort"` - OpenImPushPort []int `yaml:"openImPushPort"` - OpenImConversationPort []int `yaml:"openImConversationPort"` - OpenImCachePort []int `yaml:"openImCachePort"` - OpenImRtcPort []int `yaml:"openImRtcPort"` - OpenImThirdPort []int `yaml:"openImThirdPort"` - } + } `yaml:"rpcPort"` RpcRegisterName struct { OpenImUserName string `yaml:"openImUserName"` OpenImFriendName string `yaml:"openImFriendName"` @@ -173,124 +186,85 @@ type config struct { OpenImConversationName string `yaml:"openImConversationName"` OpenImRtcName string `yaml:"openImRtcName"` OpenImThirdName string `yaml:"openImThirdName"` - } - Zookeeper struct { - Schema string `yaml:"schema"` - ZkAddr []string `yaml:"zkAddr"` - UserName string `yaml:"userName"` - Password string `yaml:"password"` - } `yaml:"zookeeper"` + } `yaml:"rpcRegisterName"` + Log struct { StorageLocation string `yaml:"storageLocation"` RotationTime int `yaml:"rotationTime"` RemainRotationCount uint `yaml:"remainRotationCount"` RemainLogLevel int `yaml:"remainLogLevel"` IsStdout bool `yaml:"isStdout"` - WithStack bool `yaml:"withStack"` IsJson bool `yaml:"isJson"` - } - ModuleName struct { - LongConnSvrName string `yaml:"longConnSvrName"` - MsgTransferName string `yaml:"msgTransferName"` - PushName string `yaml:"pushName"` - } + WithStack bool `yaml:"withStack"` + } `yaml:"log"` + LongConnSvr struct { - WebsocketPort []int `yaml:"openImWsPort"` - WebsocketMaxConnNum int `yaml:"websocketMaxConnNum"` - WebsocketMaxMsgLen int `yaml:"websocketMaxMsgLen"` - WebsocketTimeOut int `yaml:"websocketTimeOut"` - } + WebsocketMaxConnNum int `yaml:"websocketMaxConnNum"` + WebsocketMaxMsgLen int `yaml:"websocketMaxMsgLen"` + WebsocketTimeOut int `yaml:"websocketTimeOut"` + } `yaml:"longConnSvr"` Push struct { - Jpns struct { - AppKey string `yaml:"appKey"` - MasterSecret string `yaml:"masterSecret"` - PushUrl string `yaml:"pushUrl"` - PushIntent string `yaml:"pushIntent"` - Enable bool `yaml:"enable"` - } - Getui struct { + Enable string `yaml:"enable"` + GeTui struct { PushUrl string `yaml:"pushUrl"` AppKey string `yaml:"appKey"` - Enable bool `yaml:"enable"` Intent string `yaml:"intent"` MasterSecret string `yaml:"masterSecret"` ChannelID string `yaml:"channelID"` ChannelName string `yaml:"channelName"` - } + } `yaml:"geTui"` Fcm struct { ServiceAccount string `yaml:"serviceAccount"` - Enable bool `yaml:"enable"` - } + } `yaml:"fcm"` + Jpns struct { + AppKey string `yaml:"appKey"` + MasterSecret string `yaml:"masterSecret"` + PushUrl string `yaml:"pushUrl"` + PushIntent string `yaml:"pushIntent"` + } `yaml:"jpns"` } Manager struct { - AppManagerUid []string `yaml:"appManagerUid"` - Nickname []string `yaml:"nickname"` - } + AppManagerUserID []string `yaml:"appManagerUserID"` + Nickname []string `yaml:"nickname"` + } `yaml:"manager"` - Kafka struct { - SASLUserName string `yaml:"SASLUserName"` - SASLPassword string `yaml:"SASLPassword"` - Ws2mschat struct { - Addr []string `yaml:"addr"` - Topic string `yaml:"topic"` - } - MsgToMongo struct { - Addr []string `yaml:"addr"` - Topic string `yaml:"topic"` - } - Ms2pschat struct { - Addr []string `yaml:"addr"` - Topic string `yaml:"topic"` - } - MsgToModify struct { - Addr []string `yaml:"addr"` - Topic string `yaml:"topic"` - } - ConsumerGroupID struct { - MsgToRedis string `yaml:"msgToTransfer"` - MsgToMongo string `yaml:"msgToMongo"` - MsgToMySql string `yaml:"msgToMySql"` - MsgToPush string `yaml:"msgToPush"` - MsgToModify string `yaml:"msgToModify"` - } - } - Secret string `yaml:"secret"` - MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` - MsgCacheTimeout int `yaml:"msgCacheTimeout"` - GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` - SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` + MultiLoginPolicy int `yaml:"multiLoginPolicy"` + ChatPersistenceMysql bool `yaml:"chatPersistenceMysql"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` + GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` + SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` AccessExpire int64 `yaml:"accessExpire"` - } + } `yaml:"tokenPolicy"` MessageVerify struct { FriendVerify *bool `yaml:"friendVerify"` - } + } `yaml:"messageVerify"` + IOSPush struct { PushSound string `yaml:"pushSound"` BadgeCount bool `yaml:"badgeCount"` Production bool `yaml:"production"` - } + } `yaml:"iosPush"` Callback struct { - CallbackUrl string `yaml:"callbackUrl"` - CallbackBeforeSendSingleMsg CallBackConfig `yaml:"callbackBeforeSendSingleMsg"` - CallbackAfterSendSingleMsg CallBackConfig `yaml:"callbackAfterSendSingleMsg"` - CallbackBeforeSendGroupMsg CallBackConfig `yaml:"callbackBeforeSendGroupMsg"` - CallbackAfterSendGroupMsg CallBackConfig `yaml:"callbackAfterSendGroupMsg"` - CallbackMsgModify CallBackConfig `yaml:"callbackMsgModify"` - CallbackUserOnline CallBackConfig `yaml:"callbackUserOnline"` - CallbackUserOffline CallBackConfig `yaml:"callbackUserOffline"` - CallbackUserKickOff CallBackConfig `yaml:"callbackUserKickOff"` - CallbackOfflinePush CallBackConfig `yaml:"callbackOfflinePush"` - CallbackOnlinePush CallBackConfig `yaml:"callbackOnlinePush"` - CallbackBeforeSuperGroupOnlinePush CallBackConfig `yaml:"callbackSuperGroupOnlinePush"` - CallbackBeforeAddFriend CallBackConfig `yaml:"callbackBeforeAddFriend"` - CallbackBeforeCreateGroup CallBackConfig `yaml:"callbackBeforeCreateGroup"` - CallbackBeforeMemberJoinGroup CallBackConfig `yaml:"callbackBeforeMemberJoinGroup"` - CallbackBeforeSetGroupMemberInfo CallBackConfig `yaml:"callbackBeforeSetGroupMemberInfo"` + CallbackUrl string `yaml:"url"` + CallbackBeforeSendSingleMsg CallBackConfig `yaml:"beforeSendSingleMsg"` + CallbackAfterSendSingleMsg CallBackConfig `yaml:"afterSendSingleMsg"` + CallbackBeforeSendGroupMsg CallBackConfig `yaml:"beforeSendGroupMsg"` + CallbackAfterSendGroupMsg CallBackConfig `yaml:"afterSendGroupMsg"` + CallbackMsgModify CallBackConfig `yaml:"msgModify"` + CallbackUserOnline CallBackConfig `yaml:"userOnline"` + CallbackUserOffline CallBackConfig `yaml:"userOffline"` + CallbackUserKickOff CallBackConfig `yaml:"userKickOff"` + CallbackOfflinePush CallBackConfig `yaml:"offlinePush"` + CallbackOnlinePush CallBackConfig `yaml:"onlinePush"` + CallbackBeforeSuperGroupOnlinePush CallBackConfig `yaml:"superGroupOnlinePush"` + CallbackBeforeAddFriend CallBackConfig `yaml:"beforeAddFriend"` + CallbackBeforeCreateGroup CallBackConfig `yaml:"beforeCreateGroup"` + CallbackBeforeMemberJoinGroup CallBackConfig `yaml:"beforeMemberJoinGroup"` + CallbackBeforeSetGroupMemberInfo CallBackConfig `yaml:"beforeSetGroupMemberInfo"` } `yaml:"callback"` Notification Notification `yaml:"notification"` diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 09592d650..73982b581 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -2,6 +2,7 @@ package controller import ( "fmt" + "github.com/go-redis/redis" "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" @@ -20,7 +21,6 @@ import ( pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" - "github.com/redis/go-redis/v9" "go.mongodb.org/mongo-driver/mongo" ) @@ -98,10 +98,10 @@ func NewCommonMsgDatabase(msgDocModel unRelationTb.MsgDocModelInterface, cacheMo return &commonMsgDatabase{ msgDocDatabase: msgDocModel, cache: cacheModel, - producer: kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic), - producerToMongo: kafka.NewKafkaProducer(config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.MsgToMongo.Topic), - producerToPush: kafka.NewKafkaProducer(config.Config.Kafka.Ms2pschat.Addr, config.Config.Kafka.Ms2pschat.Topic), - producerToModify: kafka.NewKafkaProducer(config.Config.Kafka.MsgToModify.Addr, config.Config.Kafka.MsgToModify.Topic), + producer: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.LatestMsgToRedis.Topic), + producerToMongo: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToMongo.Topic), + producerToPush: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.Ms2pschat.Topic), + producerToModify: kafka.NewKafkaProducer(config.Config.Kafka.Addr, config.Config.Kafka.MsgToModify.Topic), } } diff --git a/pkg/common/mw/check.go b/pkg/common/mw/check.go index 5c8a3ee0c..b1f375d08 100644 --- a/pkg/common/mw/check.go +++ b/pkg/common/mw/check.go @@ -26,7 +26,7 @@ func init() { func initAesKey() { once.Do(func() { - key := md5.Sum([]byte("openim:" + config.Config.Secret)) + key := md5.Sum([]byte("openim:" + config.Config.TokenPolicy.AccessSecret)) var err error block, err = aes.NewCipher(key[:]) if err != nil { diff --git a/pkg/common/mw/check_test.go b/pkg/common/mw/check_test.go index a70903810..88845af1b 100644 --- a/pkg/common/mw/check_test.go +++ b/pkg/common/mw/check_test.go @@ -7,7 +7,7 @@ import ( ) func TestCheck(t *testing.T) { - config.Config.Secret = "123456" + config.Config.TokenPolicy.Secret = "123456" args := []string{"1", "2", "3"} diff --git a/pkg/startrpc/start.go b/pkg/startrpc/start.go index a821dbbab..92285d063 100644 --- a/pkg/startrpc/start.go +++ b/pkg/startrpc/start.go @@ -21,7 +21,7 @@ import ( func Start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options ...grpc.ServerOption) error { fmt.Println("start", rpcRegisterName, "server, port: ", rpcPort, "prometheusPort:", prometheusPort, ", OpenIM version: ", config.Version) - listener, err := net.Listen("tcp", net.JoinHostPort(config.Config.ListenIP, strconv.Itoa(rpcPort))) + listener, err := net.Listen("tcp", net.JoinHostPort(network.GetListenIP(config.Config.Rpc.ListenIP), strconv.Itoa(rpcPort))) if err != nil { return err } @@ -34,7 +34,7 @@ func Start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(c } defer zkClient.CloseZK() zkClient.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials())) - registerIP, err := network.GetRpcRegisterIP(config.Config.RpcRegisterIP) + registerIP, err := network.GetRpcRegisterIP(config.Config.Rpc.RegisterIP) if err != nil { return err }