| /* |
| * 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 registry |
| |
| import ( |
| gxsort "github.com/dubbogo/gost/sort" |
| ) |
| |
| // ServiceInstance is the model class of an instance of a service, which is used for service registration and discovery. |
| type ServiceInstance interface { |
| |
| // GetId will return this instance's id. It should be unique. |
| GetId() string |
| |
| // GetServiceName will return the serviceName |
| GetServiceName() string |
| |
| // GetHost will return the hostname |
| GetHost() string |
| |
| // GetPort will return the port. |
| GetPort() int |
| |
| // IsEnable will return the enable status of this instance |
| IsEnable() bool |
| |
| // IsHealthy will return the value represent the instance whether healthy or not |
| IsHealthy() bool |
| |
| // GetMetadata will return the metadata |
| GetMetadata() map[string]string |
| } |
| |
| // DefaultServiceInstance the default implementation of ServiceInstance |
| // or change the ServiceInstance to be struct??? |
| type DefaultServiceInstance struct { |
| Id string |
| ServiceName string |
| Host string |
| Port int |
| Enable bool |
| Healthy bool |
| Metadata map[string]string |
| } |
| |
| // GetId will return this instance's id. It should be unique. |
| func (d *DefaultServiceInstance) GetId() string { |
| return d.Id |
| } |
| |
| // GetServiceName will return the serviceName |
| func (d *DefaultServiceInstance) GetServiceName() string { |
| return d.ServiceName |
| } |
| |
| // GetHost will return the hostname |
| func (d *DefaultServiceInstance) GetHost() string { |
| return d.Host |
| } |
| |
| // GetPort will return the port. |
| func (d *DefaultServiceInstance) GetPort() int { |
| return d.Port |
| } |
| |
| // IsEnable will return the enable status of this instance |
| func (d *DefaultServiceInstance) IsEnable() bool { |
| return d.Enable |
| } |
| |
| // IsHealthy will return the value represent the instance whether healthy or not |
| func (d *DefaultServiceInstance) IsHealthy() bool { |
| return d.Healthy |
| } |
| |
| // GetMetadata will return the metadata, it will never return nil |
| func (d *DefaultServiceInstance) GetMetadata() map[string]string { |
| if d.Metadata == nil { |
| d.Metadata = make(map[string]string) |
| } |
| return d.Metadata |
| } |
| |
| // ServiceInstanceCustomizer is an extension point which allow user using custom logic to modify instance |
| // Be careful of priority. Usually you should use number between [100, 9000] |
| // other number will be thought as system reserve number |
| type ServiceInstanceCustomizer interface { |
| gxsort.Prioritizer |
| |
| Customize(instance ServiceInstance) |
| } |