in pkg/client/dubbo/dubbo.go [292:352]
func (dc *Client) create(key string, irequest fc.IntegrationRequest) *generic.GenericService {
useNacosRegister := false
registerIds := make([]string, 0)
for k, v := range dc.rootConfig.Registries {
registerIds = append(registerIds, k)
if v.Protocol == "nacos" {
useNacosRegister = true
}
}
refConf := dg.ReferenceConfig{
InterfaceName: irequest.Interface,
Cluster: constant.ClusterKeyFailover,
RegistryIDs: registerIds,
Protocol: dubbo.DUBBO,
Generic: "true",
Version: irequest.DubboBackendConfig.Version,
Group: irequest.Group,
Loadbalance: dc.dubboProxyConfig.LoadBalance,
Retries: dc.dubboProxyConfig.Retries,
}
if refConf.Retries == "" {
if len(irequest.DubboBackendConfig.Retries) == 0 {
refConf.Retries = "3"
} else {
refConf.Retries = irequest.DubboBackendConfig.Retries
}
}
if dc.dubboProxyConfig.Timeout != nil {
refConf.RequestTimeout = dc.dubboProxyConfig.Timeout.RequestTimeoutStr
} else {
refConf.RequestTimeout = cst.DefaultReqTimeout.String()
}
logger.Debugf("[dubbo-go-pixiu] client dubbo timeout val %v", refConf.RequestTimeout)
dc.lock.Lock()
defer dc.lock.Unlock()
if service, ok := dc.GenericServicePool[key]; ok {
return service
}
if err := dg.Load(dg.WithRootConfig(dc.rootConfig)); err != nil {
panic(err)
}
_ = refConf.Init(dc.rootConfig)
refConf.GenericLoad(key)
// sleep when first call to fetch enough service meta data from nacos
// todo: GenericLoad should guarantee it
if useNacosRegister {
time.Sleep(1000 * time.Millisecond)
}
clientService := refConf.GetRPCService().(*generic.GenericService)
dc.GenericServicePool[key] = clientService
return clientService
}