123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- // Package gsel provides selector definition and implements.
- package gsel
- import (
- "context"
- "github.com/gogf/gf/v2/net/gsvc"
- )
- // Builder creates and returns selector in runtime.
- type Builder interface {
- Build() Selector
- }
- // Selector for service balancer.
- type Selector interface {
- // Pick selects and returns service.
- Pick(ctx context.Context) (node Node, done DoneFunc, err error)
- // Update updates services into Selector.
- Update(ctx context.Context, nodes Nodes) error
- }
- // Node is node interface.
- type Node interface {
- Service() gsvc.Service
- Address() string
- }
- // Nodes contains multiple Node.
- type Nodes []Node
- // DoneFunc is callback function when RPC invoke done.
- type DoneFunc func(ctx context.Context, di DoneInfo)
- // DoneInfo contains additional information for done.
- type DoneInfo struct {
- // Err is the rpc error the RPC finished with. It could be nil.
- Err error
- // Trailer contains the metadata from the RPC's trailer, if present.
- Trailer DoneInfoMD
- // BytesSent indicates if any bytes have been sent to the server.
- BytesSent bool
- // BytesReceived indicates if any byte has been received from the server.
- BytesReceived bool
- // ServerLoad is the load received from server. It's usually sent as part of
- // trailing metadata.
- //
- // The only supported type now is *orca_v1.LoadReport.
- ServerLoad interface{}
- }
- // DoneInfoMD is a mapping from metadata keys to value array.
- // Users should use the following two convenience functions New and Pairs to generate MD.
- type DoneInfoMD interface {
- // Len returns the number of items in md.
- Len() int
- // Get obtains the values for a given key.
- //
- // k is converted to lowercase before searching in md.
- Get(k string) []string
- // Set sets the value of a given key with a slice of values.
- //
- // k is converted to lowercase before storing in md.
- Set(key string, values ...string)
- // Append adds the values to key k, not overwriting what was already stored at
- // that key.
- //
- // k is converted to lowercase before storing in md.
- Append(k string, values ...string)
- // Delete removes the values for a given key k which is converted to lowercase
- // before removing it from md.
- Delete(k string)
- }
- // String formats and returns Nodes as string.
- func (ns Nodes) String() string {
- var s string
- for _, node := range ns {
- if s != "" {
- s += ","
- }
- s += node.Address()
- }
- return s
- }
|