From b516996cbe8edf453e0ce65edb9891c91592b3b9 Mon Sep 17 00:00:00 2001 From: dsx137 <70027572+dsx137@users.noreply.github.com> Date: Wed, 22 Jul 2026 15:46:48 +0800 Subject: [PATCH] refactor(core): select discovery backend from configured type (#3772) * refactor(core): select discovery backend from configured type * refactor(core): select discovery backend from configured type * fix(core): restore discovery register API compatibility * chore: remove local tooling entries from gitignore --- .gitignore | 2 +- .../discoveryregister/discoveryregister.go | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 77cf855b7..cc9d0b04e 100644 --- a/.gitignore +++ b/.gitignore @@ -387,4 +387,4 @@ Sessionx.vim # End of https://www.toptal.com/developers/gitignore/api/go,git,vim,tags,test,emacs,backup,jetbrains .idea -dist/ \ No newline at end of file +dist/ diff --git a/pkg/common/discoveryregister/discoveryregister.go b/pkg/common/discoveryregister/discoveryregister.go index ec444defb..59969d4bb 100644 --- a/pkg/common/discoveryregister/discoveryregister.go +++ b/pkg/common/discoveryregister/discoveryregister.go @@ -15,32 +15,40 @@ package discoveryregister import ( + "strings" "time" + "google.golang.org/grpc" + "github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/discovery/etcd" "github.com/openimsdk/tools/discovery/kubernetes" "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/utils/runtimeenv" - "google.golang.org/grpc" ) // NewDiscoveryRegister creates a new service discovery and registry client based on the provided environment type. func NewDiscoveryRegister(discovery *config.Discovery, share *config.Share, watchNames []string) (discovery.SvcDiscoveryRegistry, error) { - if runtimeenv.RuntimeEnvironment() == config.KUBERNETES { - namespace := discovery.Kubernetes.Namespace - if namespace == "" { - namespace = "default" + runtimeEnvironment := runtimeenv.RuntimeEnvironment() + discoveryType := discovery.Enable + if discoveryType == "" && runtimeEnvironment == config.KUBERNETES { + discoveryType = config.KUBERNETES + } + if discoveryType == config.KUBERNETES && runtimeEnvironment != config.KUBERNETES { + return nil, errs.New("unsupported discovery type", "type", discoveryType).Wrap() + } + switch discoveryType { + case config.KUBERNETES: + for i := range watchNames { + watchNames[i] = strings.Split(watchNames[i], ":")[0] } - return kubernetes.NewConnManager(namespace, watchNames, + return kubernetes.NewConnManager(discovery.Kubernetes.Namespace, watchNames, grpc.WithDefaultCallOptions( grpc.MaxCallSendMsgSize(1024*1024*20), ), + grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`), ) - } - - switch discovery.Enable { case config.ETCD: return etcd.NewSvcDiscoveryRegistry( discovery.Etcd.RootDirectory, @@ -50,6 +58,6 @@ func NewDiscoveryRegister(discovery *config.Discovery, share *config.Share, watc etcd.WithMaxCallSendMsgSize(20*1024*1024), etcd.WithUsernameAndPassword(discovery.Etcd.Username, discovery.Etcd.Password)) default: - return nil, errs.New("unsupported discovery type", "type", discovery.Enable).Wrap() + return nil, errs.New("unsupported discovery type", "type", discoveryType).Wrap() } }