You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
733 B
38 lines
733 B
package selector |
|
|
|
import ( |
|
"context" |
|
"git.diulo.com/mogfee/kit/errors" |
|
) |
|
|
|
var ErrNoAvailable = errors.ServiceUnavailable("no_available_node", "") |
|
|
|
type Selector interface { |
|
Rebalancer |
|
Select(ctx context.Context, opts ...SelectOption) (selected Node, done DoneFunc, err error) |
|
} |
|
type Rebalancer interface { |
|
Apply(nodes []Node) |
|
} |
|
type Builder interface { |
|
Build() Selector |
|
} |
|
type Node interface { |
|
Scheme() string |
|
Address() string |
|
ServiceName() string |
|
InitialWeight() *int64 |
|
Version() string |
|
Metadata() map[string]string |
|
} |
|
type DoneInfo struct { |
|
Err error |
|
ReplyMD ReplyMD |
|
|
|
BytesSent bool |
|
BytesReceived bool |
|
} |
|
type ReplyMD interface { |
|
Get(key string) string |
|
} |
|
type DoneFunc func(ctx context.Context, di DoneInfo)
|
|
|