| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package global |
| |
| // ServiceConfig is the configuration of the service provider |
| type ServiceConfig struct { |
| Filter string `yaml:"filter" json:"filter,omitempty" property:"filter"` |
| ProtocolIDs []string `yaml:"protocol-ids" json:"protocol-ids,omitempty" property:"protocol-ids"` // multi protocolIDs support, split by ',' |
| Interface string `yaml:"interface" json:"interface,omitempty" property:"interface"` |
| RegistryIDs []string `yaml:"registry-ids" json:"registry-ids,omitempty" property:"registry-ids"` |
| 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 string `yaml:"retries" json:"retries,omitempty" property:"retries"` |
| Serialization string `yaml:"serialization" json:"serialization" property:"serialization"` |
| Params map[string]string `yaml:"params" json:"params,omitempty" property:"params"` |
| Token string `yaml:"token" json:"token,omitempty" property:"token"` |
| AccessLog string `yaml:"accesslog" json:"accesslog,omitempty" property:"accesslog"` |
| TpsLimiter string `yaml:"tps.limiter" json:"tps.limiter,omitempty" property:"tps.limiter"` |
| TpsLimitInterval string `yaml:"tps.limit.interval" json:"tps.limit.interval,omitempty" property:"tps.limit.interval"` |
| TpsLimitRate string `yaml:"tps.limit.rate" json:"tps.limit.rate,omitempty" property:"tps.limit.rate"` |
| TpsLimitStrategy string `yaml:"tps.limit.strategy" json:"tps.limit.strategy,omitempty" property:"tps.limit.strategy"` |
| TpsLimitRejectedHandler string `yaml:"tps.limit.rejected.handler" json:"tps.limit.rejected.handler,omitempty" property:"tps.limit.rejected.handler"` |
| ExecuteLimit string `yaml:"execute.limit" json:"execute.limit,omitempty" property:"execute.limit"` |
| ExecuteLimitRejectedHandler string `yaml:"execute.limit.rejected.handler" json:"execute.limit.rejected.handler,omitempty" property:"execute.limit.rejected.handler"` |
| Auth string `yaml:"auth" json:"auth,omitempty" property:"auth"` |
| NotRegister bool `yaml:"not_register" json:"not_register,omitempty" property:"not_register"` |
| ParamSign string `yaml:"param.sign" json:"param.sign,omitempty" property:"param.sign"` |
| Tag string `yaml:"tag" json:"tag,omitempty" property:"tag"` |
| TracingKey string `yaml:"tracing-key" json:"tracing-key,omitempty" propertiy:"tracing-key"` |
| |
| RCProtocolsMap map[string]*ProtocolConfig |
| RCRegistriesMap map[string]*RegistryConfig |
| ProxyFactoryKey string |
| } |
| |
| type ServiceOption func(*ServiceConfig) |
| |
| func DefaultServiceConfig() *ServiceConfig { |
| return &ServiceConfig{ |
| Methods: make([]*MethodConfig, 0, 8), |
| Params: make(map[string]string, 8), |
| RCProtocolsMap: make(map[string]*ProtocolConfig), |
| RCRegistriesMap: make(map[string]*RegistryConfig), |
| } |
| } |
| |
| // Clone a new ServiceConfig |
| func (c *ServiceConfig) Clone() *ServiceConfig { |
| if c == nil { |
| return nil |
| } |
| |
| newProtocolIDs := make([]string, len(c.ProtocolIDs)) |
| copy(newProtocolIDs, c.ProtocolIDs) |
| |
| newRegistryIDs := make([]string, len(c.RegistryIDs)) |
| copy(newRegistryIDs, c.RegistryIDs) |
| |
| newMethods := make([]*MethodConfig, len(c.Methods)) |
| for i, v := range c.Methods { |
| newMethods[i] = v.Clone() |
| } |
| |
| newParams := make(map[string]string, len(c.Params)) |
| for k, v := range c.Params { |
| newParams[k] = v |
| } |
| |
| newRCProtocolsMap := make(map[string]*ProtocolConfig, len(c.RCProtocolsMap)) |
| for k, v := range c.RCProtocolsMap { |
| newRCProtocolsMap[k] = v.Clone() |
| } |
| |
| newRCRegistriesMap := make(map[string]*RegistryConfig, len(c.RCRegistriesMap)) |
| for k, v := range c.RCRegistriesMap { |
| newRCRegistriesMap[k] = v.Clone() |
| } |
| |
| return &ServiceConfig{ |
| Filter: c.Filter, |
| ProtocolIDs: newProtocolIDs, |
| Interface: c.Interface, |
| RegistryIDs: newRegistryIDs, |
| Cluster: c.Cluster, |
| Loadbalance: c.Loadbalance, |
| Group: c.Group, |
| Version: c.Version, |
| Methods: newMethods, |
| Warmup: c.Warmup, |
| Retries: c.Retries, |
| Serialization: c.Serialization, |
| Params: newParams, |
| Token: c.Token, |
| AccessLog: c.AccessLog, |
| TpsLimiter: c.TpsLimiter, |
| TpsLimitInterval: c.TpsLimitInterval, |
| TpsLimitRate: c.TpsLimitRate, |
| TpsLimitStrategy: c.TpsLimitStrategy, |
| TpsLimitRejectedHandler: c.TpsLimitRejectedHandler, |
| ExecuteLimit: c.ExecuteLimit, |
| ExecuteLimitRejectedHandler: c.ExecuteLimitRejectedHandler, |
| Auth: c.Auth, |
| RCProtocolsMap: newRCProtocolsMap, |
| RCRegistriesMap: newRCRegistriesMap, |
| ProxyFactoryKey: c.ProxyFactoryKey, |
| NotRegister: c.NotRegister, |
| ParamSign: c.ParamSign, |
| Tag: c.Tag, |
| TracingKey: c.TracingKey, |
| } |
| } |