@ -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. Kuber netes. N amespace, 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 . Enabl e) . Wrap ( )
return nil , errs . New ( "unsupported discovery type" , "type" , discovery Typ e) . Wrap ( )
}
}