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.
78 lines
1.4 KiB
78 lines
1.4 KiB
6 years ago
|
package direct
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/bilibili/kratos/pkg/conf/env"
|
||
|
"github.com/bilibili/kratos/pkg/naming"
|
||
|
"github.com/bilibili/kratos/pkg/net/rpc/warden/resolver"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// Name is the name of direct resolver
|
||
|
Name = "direct"
|
||
|
)
|
||
|
|
||
|
var _ naming.Resolver = &Direct{}
|
||
|
|
||
|
// New return Direct
|
||
|
func New() *Direct {
|
||
|
return &Direct{}
|
||
|
}
|
||
|
|
||
|
// Build build direct.
|
||
|
func Build(id string) *Direct {
|
||
|
return &Direct{id: id}
|
||
|
}
|
||
|
|
||
|
// Direct is a resolver for conneting endpoints directly.
|
||
|
// example format: direct://default/192.168.1.1:8080,192.168.1.2:8081
|
||
|
type Direct struct {
|
||
|
id string
|
||
|
}
|
||
|
|
||
|
// Build direct build.
|
||
|
func (d *Direct) Build(id string) naming.Resolver {
|
||
|
return &Direct{id: id}
|
||
|
}
|
||
|
|
||
|
// Scheme return the Scheme of Direct
|
||
|
func (d *Direct) Scheme() string {
|
||
|
return Name
|
||
|
}
|
||
|
|
||
|
// Watch a tree
|
||
|
func (d *Direct) Watch() <-chan struct{} {
|
||
|
ch := make(chan struct{}, 1)
|
||
|
ch <- struct{}{}
|
||
|
return ch
|
||
|
}
|
||
|
|
||
|
//Unwatch a tree
|
||
|
func (d *Direct) Unwatch(id string) {
|
||
|
}
|
||
|
|
||
|
//Fetch fetch isntances
|
||
|
func (d *Direct) Fetch(ctx context.Context) (insMap map[string][]*naming.Instance, found bool) {
|
||
|
var ins []*naming.Instance
|
||
|
|
||
|
addrs := strings.Split(d.id, ",")
|
||
|
for _, addr := range addrs {
|
||
|
ins = append(ins, &naming.Instance{
|
||
|
Addrs: []string{fmt.Sprintf("%s://%s", resolver.Scheme, addr)},
|
||
|
})
|
||
|
}
|
||
|
if len(ins) > 0 {
|
||
|
found = true
|
||
|
}
|
||
|
insMap = map[string][]*naming.Instance{env.Zone: ins}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//Close close Direct
|
||
|
func (d *Direct) Close() error {
|
||
|
return nil
|
||
|
}
|