# README
grpccli
grpc client with support for service discovery, logging, load balancing, trace, metrics, retries, circuit breaker.
Example of use
import "github.com/go-dev-frame/sponge/pkg/grpc/grpccli"
func grpcClientExample() serverNameV1.UserExampleServiceClient {
err := config.Init(third_party.Path("../config/conf.yml"))
if err != nil {
panic(err)
}
var discovery registry.Discovery
var endpoint = fmt.Sprintf("127.0.0.1:%d", config.Get().Grpc.Port)
ctx, _ := context.WithTimeout(context.Background(), time.Second*3)
if config.Get().App.EnableRegistryDiscovery {
endpoint = "discovery:///" + config.Get().App.Name
discovery = discoveryETCD(config.Get().Etcd.Addrs)
}
conn, err := grpccli.DialInsecure(ctx, endpoint,
grpccli.WithEnableLog(logger.Get()),
grpccli.WithDiscovery(discovery),
//grpccli.WithEnableCircuitBreaker(),
//grpccli.WithEnableTrace(),
//grpccli.WithEnableLoadBalance(),
//grpccli.WithEnableRetry(),
//grpccli.WithEnableMetrics(),
)
if err != nil {
panic(err)
}
return serverNameV1.NewUserExampleServiceClient(conn)
}
func discoveryETCD(endpoints []string) registry.Discovery {
cli, err := clientv3.New(clientv3.Config{
Endpoints: endpoints,
DialTimeout: 10 * time.Second,
DialOptions: []grpc.DialOption{
grpc.WithBlock(),
grpc.WithTransportCredentials(insecure.NewCredentials()),
},
})
if err != nil {
panic(err)
}
return etcd.New(cli)
}
# Functions
Dial to grpc server Deprecated: use NewClient instead.
NewClient creates a new grpc client.
WithDialOptions set dial options.
WithDiscovery set dial discovery.
WithDiscoveryInsecure setting discovery insecure.
WithEnableCircuitBreaker enable circuit breaker.
WithEnableLoadBalance enable load balance.
WithEnableLog enable log.
WithEnableMetrics enable metrics.
WithEnableRequestID enable request id.
WithEnableRetry enable registry.
WithEnableTrace enable trace.
WithOneWaySecure set one-way secure.
WithSecure support setting one-way or two-way secure.
WithStreamInterceptors set dial streamInterceptors.
WithTimeout set dial timeout.
WithToken set token.
WithTwoWaySecure set two-way secure.
WithUnaryInterceptors set dial unaryInterceptors.
# Type aliases
Option grpc dial options.