try grpc lb interface
parent
a1c9db0f80
commit
353cb5000f
@ -0,0 +1,36 @@
|
|||||||
|
package internal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"zero/core/discov"
|
||||||
|
"zero/rpcx/internal/balancer/roundrobin"
|
||||||
|
"zero/rpcx/internal/resolver"
|
||||||
|
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/connectivity"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DiscovClient struct {
|
||||||
|
conn *grpc.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDiscovClient(etcd discov.EtcdConf, opts ...ClientOption) (*DiscovClient, error) {
|
||||||
|
resolver.RegisterResolver(etcd)
|
||||||
|
opts = append(opts, WithDialOption(grpc.WithBalancerName(roundrobin.Name)))
|
||||||
|
conn, err := dial("discov:///", opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &DiscovClient{
|
||||||
|
conn: conn,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DiscovClient) Next() (*grpc.ClientConn, bool) {
|
||||||
|
state := c.conn.GetState()
|
||||||
|
if state == connectivity.Ready {
|
||||||
|
return c.conn, true
|
||||||
|
} else {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"zero/core/discov"
|
||||||
|
"zero/core/lang"
|
||||||
|
"zero/rpcx/internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
cli, err := internal.NewDiscovClient(discov.EtcdConf{
|
||||||
|
Hosts: []string{"localhost:2379"},
|
||||||
|
Key: "rpcx",
|
||||||
|
})
|
||||||
|
lang.Must(err)
|
||||||
|
|
||||||
|
cli.Next()
|
||||||
|
}
|
Loading…
Reference in New Issue