Skip to content
Snippets Groups Projects
Commit cbdf222d authored by vito.he's avatar vito.he
Browse files

Add:registries config option in referenceConfig & serviceConfig

parent 289b1c92
No related branches found
No related tags found
No related merge requests found
......@@ -83,7 +83,34 @@ func TestLoad(t *testing.T) {
consumerConfig = nil
providerConfig = nil
}
func TestWithNoRegLoad(t *testing.T) {
doInit()
doinit()
providerConfig.Services["MockService"].Registries = []string{}
consumerConfig.References["MockService"].Registries = []string{}
ms := &MockService{}
SetConsumerService(ms)
SetProviderService(ms)
extension.SetProtocol("registry", GetProtocol)
extension.SetCluster("registryAware", cluster_impl.NewRegistryAwareCluster)
extension.SetProxyFactory("default", proxy_factory.NewDefaultProxyFactory)
Load()
assert.Equal(t, ms, GetRPCService(ms.Service()))
ms2 := &struct {
MockService
}{}
RPCService(ms2)
assert.NotEqual(t, ms2, GetRPCService(ms2.Service()))
conServices = map[string]common.RPCService{}
proServices = map[string]common.RPCService{}
common.ServiceMap.UnRegister("mock", "MockService")
consumerConfig = nil
providerConfig = nil
}
func TestConfigLoaderWithConfigCenter(t *testing.T) {
extension.SetConfigCenterFactory("mock", func() config_center.DynamicConfigurationFactory {
return &config_center.MockDynamicConfigurationFactory{}
......
......@@ -38,29 +38,27 @@ import (
type ReferenceConfig struct {
context context.Context
pxy *proxy.Proxy
InterfaceName string `required:"true" yaml:"interface" json:"interface,omitempty" property:"interface"`
Check *bool `yaml:"check" json:"check,omitempty" property:"check"`
Url string `yaml:"url" json:"url,omitempty" property:"url"`
Filter string `yaml:"filter" json:"filter,omitempty" property:"filter"`
Protocol string `yaml:"protocol" json:"protocol,omitempty" property:"protocol"`
//Registries []ConfigRegistry `required:"true" yaml:"registries" json:"registries,omitempty" property:"registries"`
Cluster string `yaml:"cluster" json:"cluster,omitempty" property:"cluster"`
Loadbalance string `yaml:"loadbalance" json:"loadbalance,omitempty" property:"loadbalance"`
Retries int64 `yaml:"retries" json:"retries,omitempty" property:"retries"`
Group string `yaml:"group" json:"group,omitempty" property:"group"`
Version string `yaml:"version" json:"version,omitempty" property:"version"`
Methods []*MethodConfig `yaml:"methods" json:"methods,omitempty" property:"methods"`
async bool `yaml:"async" json:"async,omitempty" property:"async"`
invoker protocol.Invoker
urls []*common.URL
InterfaceName string `required:"true" yaml:"interface" json:"interface,omitempty" property:"interface"`
Check *bool `yaml:"check" json:"check,omitempty" property:"check"`
Url string `yaml:"url" json:"url,omitempty" property:"url"`
Filter string `yaml:"filter" json:"filter,omitempty" property:"filter"`
Protocol string `yaml:"protocol" json:"protocol,omitempty" property:"protocol"`
Registries []string `yaml:"registries" json:"registries,omitempty" property:"registries"`
Cluster string `yaml:"cluster" json:"cluster,omitempty" property:"cluster"`
Loadbalance string `yaml:"loadbalance" json:"loadbalance,omitempty" property:"loadbalance"`
Retries int64 `yaml:"retries" json:"retries,omitempty" property:"retries"`
Group string `yaml:"group" json:"group,omitempty" property:"group"`
Version string `yaml:"version" json:"version,omitempty" property:"version"`
Methods []*MethodConfig `yaml:"methods" json:"methods,omitempty" property:"methods"`
async bool `yaml:"async" json:"async,omitempty" property:"async"`
invoker protocol.Invoker
urls []*common.URL
}
func (c *ReferenceConfig) Prefix() string {
return constant.ReferenceConfigPrefix + c.InterfaceName + "."
}
type ConfigRegistry string
func NewReferenceConfig(ctx context.Context) *ReferenceConfig {
return &ReferenceConfig{context: ctx}
}
......@@ -102,7 +100,7 @@ func (refconfig *ReferenceConfig) Refer() {
}
} else {
//2. assemble SubURL from register center's configuration模式
refconfig.urls = loadRegistries(consumerConfig.Registries, common.CONSUMER)
refconfig.urls = loadRegistries(refconfig.Registries, consumerConfig.Registries, common.CONSUMER)
//set url to regUrls
for _, regUrl := range refconfig.urls {
......
......@@ -80,6 +80,7 @@ func doInit() {
},
References: map[string]*ReferenceConfig{
"MockService": {
Registries: []string{"shanghai_reg1", "shanghai_reg2", "hangzhou_reg1", "hangzhou_reg2"},
InterfaceName: "MockService",
Protocol: "mock",
Cluster: "failover",
......
......@@ -44,22 +44,35 @@ func (*RegistryConfig) Prefix() string {
return constant.RegistryConfigPrefix
}
func loadRegistries(registries map[string]*RegistryConfig, roleType common.RoleType) []*common.URL {
func loadRegistries(targetRegistries []string, registries map[string]*RegistryConfig, roleType common.RoleType) []*common.URL {
var urls []*common.URL
for k, registryConf := range registries {
target := false
//if user config targetRegistries
for _, tr := range targetRegistries {
if tr == k {
target = true
break
}
}
//else if user not config targetRegistries,default load all
if len(targetRegistries) == 0 {
target = true
}
if target {
url, err := common.NewURL(
context.TODO(),
constant.REGISTRY_PROTOCOL+"://"+registryConf.Address,
common.WithParams(registryConf.getUrlMap(roleType)),
common.WithUsername(registryConf.Username),
common.WithPassword(registryConf.Password),
)
url, err := common.NewURL(
context.TODO(),
constant.REGISTRY_PROTOCOL+"://"+registryConf.Address,
common.WithParams(registryConf.getUrlMap(roleType)),
common.WithUsername(registryConf.Username),
common.WithPassword(registryConf.Password),
)
if err != nil {
logger.Errorf("The registry id:%s url is invalid ,and will skip the registry, error: %#v", k, err)
} else {
urls = append(urls, &url)
if err != nil {
logger.Errorf("The registry id:%s url is invalid ,and will skip the registry, error: %#v", k, err)
} else {
urls = append(urls, &url)
}
}
}
......
......@@ -43,17 +43,17 @@ import (
type ServiceConfig struct {
context context.Context
Filter string `yaml:"filter" json:"filter,omitempty" property:"filter"`
Protocol string `required:"true" yaml:"protocol" json:"protocol,omitempty" property:"protocol"` //multi protocol support, split by ','
InterfaceName string `required:"true" yaml:"interface" json:"interface,omitempty" property:"interface"`
Registries []ConfigRegistry `required:"true" yaml:"registries" json:"registries,omitempty" property:"registries"`
Cluster string `default:"failover" yaml:"cluster" json:"cluster,omitempty" property:"cluster"`
Loadbalance string `default:"random" yaml:"loadbalance" json:"loadbalance,omitempty" property:"loadbalance"`
Group string `yaml:"group" json:"group,omitempty" property:"group"`
Version string `yaml:"version" json:"version,omitempty" property:"version" `
Methods []*MethodConfig `yaml:"methods" json:"methods,omitempty" property:"methods"`
Warmup string `yaml:"warmup" json:"warmup,omitempty" property:"warmup"`
Retries int64 `yaml:"retries" json:"retries,omitempty" property:"retries"`
Filter string `yaml:"filter" json:"filter,omitempty" property:"filter"`
Protocol string `required:"true" yaml:"protocol" json:"protocol,omitempty" property:"protocol"` //multi protocol support, split by ','
InterfaceName string `required:"true" yaml:"interface" json:"interface,omitempty" property:"interface"`
Registries []string `yaml:"registries" json:"registries,omitempty" property:"registries"`
Cluster string `default:"failover" yaml:"cluster" json:"cluster,omitempty" property:"cluster"`
Loadbalance string `default:"random" yaml:"loadbalance" json:"loadbalance,omitempty" property:"loadbalance"`
Group string `yaml:"group" json:"group,omitempty" property:"group"`
Version string `yaml:"version" json:"version,omitempty" property:"version" `
Methods []*MethodConfig `yaml:"methods" json:"methods,omitempty" property:"methods"`
Warmup string `yaml:"warmup" json:"warmup,omitempty" property:"warmup"`
Retries int64 `yaml:"retries" json:"retries,omitempty" property:"retries"`
unexported *atomic.Bool
exported *atomic.Bool
rpcService common.RPCService
......@@ -88,7 +88,7 @@ func (srvconfig *ServiceConfig) Export() error {
return nil
}
regUrls := loadRegistries(providerConfig.Registries, common.PROVIDER)
regUrls := loadRegistries(srvconfig.Registries, providerConfig.Registries, common.PROVIDER)
urlMap := srvconfig.getUrlMap()
for _, proto := range loadProtocol(srvconfig.Protocol, providerConfig.Protocols) {
......
......@@ -76,7 +76,7 @@ func doinit() {
"MockService": {
InterfaceName: "MockService",
Protocol: "mock",
Registries: []ConfigRegistry{"shanghai_reg1", "shanghai_reg2", "hangzhou_reg1", "hangzhou_reg2"},
Registries: []string{"shanghai_reg1", "shanghai_reg2", "hangzhou_reg1", "hangzhou_reg2"},
Cluster: "failover",
Loadbalance: "random",
Retries: 3,
......
......@@ -35,6 +35,9 @@ registries :
references:
"UserProvider":
registries:
- "hangzhouzk"
- "shanghaizk"
filter: ""
protocol : "dubbo"
interface : "com.ikurento.user.UserProvider"
......
......@@ -5,6 +5,9 @@ config_center:
address: "127.0.0.1"
references:
"UserProvider":
registries:
- "hangzhouzk"
- "shanghaizk"
filter: ""
protocol : "dubbo"
interface : "com.ikurento.user.UserProvider"
......
......@@ -27,6 +27,9 @@ registries :
services:
"UserProvider":
registries:
- "hangzhouzk"
- "shanghaizk"
filter: ""
protocol : "dubbo"
# equivalent to interface of dubbo.xml
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment